ViewSign Cloud - On-Premise

From ViewSonic Documentation
Jump to: navigation, search

Software Release

Release notes

See the eSignAnyWhere Version History on esignanywhere.net.

Version Date Summary
eSAW 20.28 July 2020 Feature Release (See link above)
eSAW 20.14 March 2020 Feature Release (See link above)
eSAW 19.76 March 2020 LTS Release based on 3.7
(See link above)
eSAW 3.7 January 2020 (See link above)
eSAW 3.6 September 2019 (See link above)
eSAW 3.5 July 2019 (See link above)
eSAW 3.4 February 2019 (See link above)
eSAW 3.3 October 2018 (See link above)
eSAW 3.2 July 2018 PDF Download
eSAW 3.1 May 2018 PDF Download
eSAW 3.0 February 2018 PDF Download
eSAW 2.6 January 2018 PDF Download
eSAW 2.5 September 2017 PDF Download
eSAW 2.4 July 5th, 2017 PDF Download

User Guide

Introduction

Create and Send Envelopes

Envelope Management

Settings & Customization

A guide for eSignAnyWhere signers

Signature Ceremony

There are two types of signers:

Non-registered Signer: User has no account on the eSignAnywhere Platform
Registered Signer: User has an account on the eSignAnywhere Platform

Default Use Case

The default use case for a signer is very simple. (1) The signer receives an email with a link to the document. (2) The signer has to open the link and sign the document. (3) Finish the document. (4) Additional download of the document He/She is guided through the document by eSAW.

Signer Receives an Email

Signer Opens the Link

Signer opens the link to get to the document. The layout is dynamic, to use the available area efficiently.

Sign the Document

The signer signs the document by clicking on the signature field or using the guiding.

Finish the Document

If the sender allows the recipients of the envelope to have access again after finishing and closing the envelope, you can open the finished envelope again and see all the signed signature fields and filled out form fields.

Download the Document

Optional download of the document

HTML 5 Signature Types

The next figures show you the different signature types (Click2Sign, Draw2Sign, Type2Sign) and how to sign these individual signature fields.

Click 2 Sign

This is the simplest signature type, the signer has just to click on the signature field to sign it.

Draw 2 Sign

This type allows the signer to draw his signature by mouse, finger or pen. Just an image of his signature is created and embedded into the document.

Type 2 Sign

With this type the signer has to type in his name to sign the signature field.

SMS-OTP

First of all there are two different ways to configure SMS-OTP. The first case (Phone number entered when signing) shows that the recipient can choose the phone number on which he/she wants to get the SMS. The second case (Phone number is already defined) shows that the sender define the phone number on which the recipient gets the sms.

SMS-OTP (Phone number entered when signing)

The SMS-OTP signature field is similar to the Click2Sign but with a different process (Receiving a SMS with a one-time-password). The following figures guide you through the process of the SMS-OTP signature.

After you have opened the envelope and clicked on the signature field, the following window appears:

You can select your country by clicking on the flag. Then you can see how you have to write the phone number.

After entering your phone number you get a sms and the following window appears. There you have to fill in the code which you got via sms. Please have a look at the following figures.

Once you have filled in the code the document is signed.

SMS-OTP (Phone number is already defined)

In this case the recipient has just to accept the sending of the transaction code and automatically receives a SMS on the phone number which has been chosen by the sender.

Biometric Signature

There are two ways to sign with a biometric signature in eSignAnyWhere:

  1. SignAnyWhere App for iOS and Android
  2. Browser with SIGNificant SignOnPhone App for iOS, Android and Windows

(1) SignAnyWhere App

The signer uses a smartphone or tablet with the preinstalled SignAnyWhere App. When the signer opens the SignAnyWhere App Link of the email the app will start automatically and load the document. The biometric signature is natively recorded and encrypted on the tablet or smartphone via the SignAnyWhere App.

(2) Browser (PC) with SIGNificant SignOnPhone App

The Biometric Signature requires a smartphone or tablet with the SIGNificant SignOnPhone App. The App is used to record the biometric signature. The smartphone or tablet is required because of security reasons to ensure high encryption and security of the biometric data. The App is available for free download in the App-Stores of iOS, Android and Windows.

Web browser: When signing a biometric signature a QR Code is generated and displayed to record the biometric signature on a smartphone or tablet.

SignOnPhone App: The SIGNificant SignOnPhone App. The signer has to select the correct server “eSignAnyWhere (significant.com)”. If you are using eSAW on premise you have to define the endpoint in the settings of the app. To change server settings the signer just selects it from the service provider list.

SignOnPhone App: Scan the QR Code in the app.

SignOnPhone App: Sign the contract in the app. The biometric data is directly encrypted on the device.

Disposable Certificate

The process of signing with a disposable certificate is different to the process of signing with the signature fields above. Therefore this explanation and figures will guide you through the process of signing with this signature type. First the signer receives an email to sign the envelope. After clicking on the signature field a new window appears that you have to accept the general terms and conditions. The next figure shows you how the agreement looks like.

After accepting all three points of the agreement you get a sms OTP. Enter the code which you got via sms and fill it in the field next to OTP. The next figure gives you an overview of the notification you get.

After entering the correct code you have signed the document successfully.

Local Certificate

If the recipient gets an envelope with a local certificate signature following window appears after clicking on the signature field:

There, the recipient can choose between his/her certificates and sign with them.

Digital Remote Signature

After clicking on the remote signature field following window appears:

After you filled in the user Id you can select the device id and OTP. The following screenshot shows the configuration:

After this configuration you can request a OTP:

Note: This is the configuration if the sender does not fill in the dates for the recipient. If the sender defines the user Id you just have to sign.

Optional Features

Signature Disclosure

If the Signature Disclosure is used, the signer will just get access to the document if he accepts the Signature Disclosure.

Authentication

When Authentication is used (e.g. SMS, PIN or Windows Live) the signer has to authenticate himself before he gets access to the document. So the content of the document is protected and access is just granted to the signer. If there are more than one authentication methods for the signer available, the signer can select the one he/she prefers.

PIN

SMS

Windows Live

Multiple Signature Types

The sender of an envelope can select more than one signature type, so that the signer is able to choose his/her preferred type.

Batch Signatures

With the batch signing the recipient can decide if he/she wants to sign all signatures within a document at once or each by each.

If the sender selected signature list (“preselected” or “unselected”) the recipient gets a window like in the last screenshot. If the sender selected “simple batch” the recipient gets the following window by clicking on the signature field:

If the sender selected:

  • selected (required mandatory)
  • or unselected (required mandatory)

you will see a window like the next figure shows:

There you can see that all required signature fields are pre selected and unchangeable, all other signatures are either preselected or unselected depending on the settings of the sender.

Delegation

If you allow recipients of an envelope to delegate the signing task (see envelope setting in Step3 or organisation settings), the recipient will see the following options:

Download Documents

After signing and finishing the document you can download several documents which are shown in the next figure.

You can either download:

  1. The document with the signed signature
  2. The Audit Trail
  3. The document and the Audit Trail (zipped and unzipped)
  4. Or the original document (without signatures)

Document with Signature

The Audit Trail

The Audit Trail shows you all information about the document (e. g. information about the signer, the workstep, download information and more)

Following figure shows an example of an Audit Trail:

Document and Audit Trail (zipped and unzipped)

If you download both PDF unzipped you get one PDF containing both documents (e. g. first page is the Audit Trail, second one is the signed document). If you download both PDF zipped you get two PDF one for each document (e. g. one PDF contains the document, one contains the Audit Trail)

Download the Original Document

If you download this document you get the document without signatures.

For opening the documents we suggest the Adobe Acrobat Reader. Within this program you can download certificates so that you can see if the signatures are valid. The next figure shows you the notification within the program to download the certificates and the other figure shows you a valid signature within a document, opened with Adobe Acrobat Reader.

1) Download certificates

2) Valid signature

If the Adobe Reader says the document is not valid signed:

This is typically caused by an outdated Adobe Reader with no update-to-certificates. Please install a new version or perform an update of the certificates (Setting->Trust Manager->Update AATL/EUTL).

The Advanced User Guide contains some non-default features of eSignAnyWhere.

Customization of eSignAnyWhere

This advanced feature is for customizing the eSignAnyWhere Viewer for the signers. You can change the colors and logo to align them to your CI and set eSAW Viewer behavior. Therefore you have to upload a ZIP-Archive with the new design settings. You can download a design template and change it. Moreover you are able to set a redirect URL when a document is finished.

You can find the the configuration for the customization of eSignAnyWhere in your organization settings in the section “Design of the document viewer for recipients”

The next screenshot shows these configurations:

If the feature is available for your organization, you can:

  • set a redirect URL for finished documents
  • upload a design
  • reset to default design
  • download a design template
  • download current design

The Customisation.zip file contains:

  • variables.xml: contains the style configuration of eSignAnyWhere. The comments in the file will help you to modify it.
  • global_variables.xml: contains settings for the eSAW Viewer
  • files/

In the files you can find the following:

  • logo_topbar
  • logo_loading
  • Localizations.template.custom
  • Here you can customize localizations for a specific eSAW organization
  • You can create your own Localizations.*.custom.json files, modify the elements which should be customized and add the file to the customization package
  • custom.css
  • Here you can customize the layout for a specific eSAW organization
  • You can adapt the layout of the SAW Viewer
  • custom.js
  • Here you can customize the SAW Viewer by
  • Adding custom buttons
  • Listening for events
  • Adding individual JavaScript code for other purposes
  • Note: To enable this feature, the ViewerPreference LoadCustomJs must be enabled and the Custom.js file needs to be placed in #InstallationDirectory#/Web/Custom.

If you have modified the files just put them in an archive and upload via UI. You can use svg instead of png, gif or jpg.

Customization - Viewer Policy

You can also set your default viewer policies. So you can in addition to the visual appearance also set the UI elements.

It may take some minutes until the new design is applied to your eSignAnyWhere Viewer.

Email Templating

The Email Templating allows you to adopt the email, sent by eSignAnyWhere. A default template and default notifications are present for every organization and can always be restored to default. For each language set in “Localization”, a separate template and notification can be set. This allows you to set up languages, which are not directly supported by eSignAnyWhere and send the notifications in the, by you translated, language to the recipient.

Note: If a recipient has an eSignAnyWhere user account (on the same instance), the user will receive the mails in his/her prefered language. Sample: the recipient has a eSAW language set in German and you send her/him an envelope in Italian, he/she will receive the notification in German (his prefered language).

There are three types of templates:

  • email master template “TEMPLATE”
  • reminder template for reminder notifications “ReminderText”, which is used a prefix for the subject of the mail (e.g. “Reminder: “)
  • email notifications, the text/wording/layout used for a certain type of notification and is placed within the master template

The email master template is called “TEMPLATE” and defines the basic layout of the notifications for the given language. You can define, for example a header, logo, footer, etc. The {{Content}} element is a placeholder to be replaced by the email notification template (e.g. “Sign”) to place the notification information and text.

You can select the following placeholders, but please note that not all placeholders are available in all notifications! The next section shows you all general available placeholders:

#ContactUrl#
#Delegatee#
#DelegationMessage#
#Delegator#
#DelegatorName#
#EnvelopeList#
#EnvelopeMessage#
#EnvelopeName#
#ExpirationDate#
#InviterName#
#LicenseInfo#
#NumberOfRecipientsWhoSigned#
#OrganizationName#
#Password#
#PersonalMessage#
#RecipientEmail#
#RecipientFirstName#
#RecipientLastName#
#RecipientList#
#SenderFirstName#
#SenderLastName#
#SupportUrl#
#TotalNumberOfRecipients#
#Url#
#UrlAndroid#
#UrlDownload#
#UrlExpiration#
#UrlIos#
#UrlWindows#
#UserFirstName#
#UserLastName#
#UserList#
#Template:Content#
Please note, that not all placeholders are available for all notification types! Moreover, you can find detailed information about the templates in the following section in the product: Settings->Email Templates

Simple Example

Messages exist of the placeholders (see above) and basic HTML tags. Therefore a HTML knowledge for modifing the messages is useful (<br />, <p>...</p>, <strong>...</strong>, <h3>...</h3>).

<h4>The envelope "#EnvelopeName#" has been signed by the following recipients:</h4>
<p>#RecipientList#</p>

Restore Default Template

If you click on restore the current selected template will be restored to the system’s default.

Bulk Envelopes

This is an additional eSignAnyWhere feature and is available with version 3.1. Bulk envelopes allow you to send an envelope to multiple signers. The workflow splits with the bulk recipient, so that you will receive unique signed documents for each bulk recipient. This feature is perfect for letting one document (e. g. a new company policy) sign by many recipients. This feature is not available with basic subscription, so please contact your Namirial sales.

1. Design the Workflow

New buttons “Add Bulk” and “Bulk CSV Template” are available. You can add one bulk per envelope and you are defining the bulk recipients via CSV file. The “Bulk CSV Template” generates your desired bulk recipient configuration. So you are able to define Authentication or Information for Remote or Disposable Certificates in the CSV. Please note that you have a maximum of 1000 recipients per bulk.

The Bulk Recipient in the Recipient List.

You can see the uploaded recipient list and the number of recipients found in the uploaded CSV file.

2. Designer

In the designer the bulk recipients behave like a normal recipient. You can place and define its signature fields, form fields or predefined fields.

3. Manage Bulk Envelopes

The bulk envelopes are listed normal in the document overview with special bulk envelope features. The statistics are added (number of completed, rejected, … envelopes of the bulk). Moreover you still can control each unique workflow.

Bulk Envelopes API

Sending a bulk is basically creating multiple independent envelopes, which are linked together by an identifiert (bulk id). The API allows accessing the bulk and its envelopes. Please note that only one bulk per envelope is allowed.

Sending a bulk via SendEnvelopes or CreateDraft is simple.

<envelope>
  ...
  <steps>
    ...
    <step> <!-- a bulk step is a step with multiple recipients -->
      ...
      <recipients>
        <recipient>
		...
        </recipient>
        <recipient>
        ...
        </recipient>
      </recipients>
    </step>
    ...
  </steps>
  ...
</envelope>
Result of sending a Bulk is different of sending an envelope. You will receive a bulk identifier in addition.

<apiResult version="0.0.0.0">
   <baseResult>ok</baseResult>
   <okInfo>
      <bulk id="dc4cdaa9-c204-470f-986d-94786ff159f7">
         <envelopeId eMail="mail1@eflowauto.test">2daf11a0-6802-474b-bb48-df4b199b026a</envelopeId>
         <envelopeId eMail="mail2@eflowauto.test">18c7245f-2a78-45b8-9262-3ffe05a62fd1</envelopeId>
      </bulk>
   </okInfo>
</apiResult>
The Callbacks got an additional bulk parameter to provide the bulk id:

http://www.mycallback.at?envelope=##EnvelopeId##&bulk=##BulkId##&action=##Action##
Finding Envelopes (v1) of Bulk: per default only bulk parent are returned. If you want to get the children of a bulk use the bulk parameter:

<findEnvelopesDescriptor>
   <status>Active</status>
   <bulk>dc4cdaa9-c204-470f-986d-94786ff159f7</bulk> <!-- new filter parameter -->
</findEnvelopesDescriptor>
The FindEnvelopes_v2 will return in the Extended version also details about the bulk id.

GetEnvelopesById also returns the bulk id. If you are calling with the bulk id, a list of all bulk recipients and its envelopes ids is returned.

GetEnvelopesById with a Bulk ID:

<apiResult version="0.0.0.0">
   <baseResult>ok</baseResult>
   <okInfo>
      <envelopeStatus>
...
         <id>5b69258c-2327-43ba-80ad-53b4b6a2f3eb</id>
         <bulk>5b69258c-2327-43ba-80ad-53b4b6a2f3eb</bulk>
...
         <bulkRecipients>
            <bulkRecipient eMail="test1@eflowauto.test" id="e9b53acc-9378-4308-99be-0fca92465dac">
...
            </bulkRecipient>
            <bulkRecipient eMail="test2@eflowauto.test" id="5701da00-2b8c-4e2a-8698-a66c43c3e4c7">
...
            </bulkRecipient>
         </bulkRecipients>
      </envelopeStatus>
   </okInfo>
</apiResult>
GetEnvelopeId with an envelope id, which is part of a bulk:

<apiResult version="0.0.0.0">
   <baseResult>ok</baseResult>
   <okInfo>
      <envelopeStatus>
...
         <id>e9b53acc-9378-4308-99be-0fca92465dac</id>
         <bulk>5b69258c-2327-43ba-80ad-53b4b6a2f3eb</bulk> <!-- bulk id is set - see find result above -->
...
         <bulkRecipients>
            <bulkRecipient eMail="" id="">
...
            </bulkRecipient>
         </bulkRecipients>
      </envelopeStatus>
   </okInfo>
</apiResult>

Complete Bulk Configuration

SAML Support

SAML is supported for signer authentication (similar to OAuth2) and for eSaw backend users.

Examples of Use Cases

  • ADFS integration for eSAW backend users
  • Signer authentication with external SAML service

How to Configure OAuth2 Authentication

OAuth2 enables you to configure an external authentication method, such as LinkedIn or Facebook. In this section you find how to configure them.

The signer will see an additional external authentication option. A pop-up appears, where the signer has to enter his credentials to authenticate. eSignAnyWhere will receive a temporary token to receive some authentication information, which will be stored in the audit log of the envelope. You can integrate any external OAuth 2.0 service. For example the open source project OAuthServer (https://oauthserver.codeplex.com/) would enable you to connect your AD/LDAP via OAuth 2.0 and eSignAnyWhere, or you can implement your own OAuth 2.0 service.

The following two OAuth2 configuration examples (LinkedIn & Facebook) show you how to configure it. Because these two guides are external services the procedure may change by time. They should show you the basic two concepts to configure OAuth2. Please note, to force a specific user the response must be JSON!

OAuth2 - LinkedIn

Step 1: Create a new LinkedIn App

Go to your LinkedIn Account and create a new LinkedIn App. You have to enter a name (e.g. “my-eSAW-Authenticator”, a description, URL and some additional information). Once you have created your LinkedIn App you have to finish the configuration.

Step 2: Configure LinkedIn App

In your LinkedIn App you will find your (secret) client-id and client-secret, and the available scopes (e.g. r_basicprofile r_emailaddress). It is important to separate the scopes with space ” “.

You have to add a OAuth 2.0 forwarding URL. The URL for eSignAnyWhere is
https://www.significant.com/esawviewer/HttpHandlers/AuthHandler.ashx.

Step 3: Configure eSignAnyWhere

Open the Settings > Organization page and add a new OAuth 2.0 provider. Enter the LinkedIn credentials as below (see LinkedIn documentation for current configuration!). The Identifier is your unique identifier for using with API. The ressources URIs are called for data, which will be stored in the audit-log.

Client ID: your Linked Client ID
Client Secret: your LinkedIn Client Secret
Scope: r_basicprofile r_emailaddress
Authorization URI: https://www.linkedin.com/oauth/v2/authorization
Token URI: https://www.linkedin.com/oauth/v2/accessToken
Logout URI: https://www.linkedin.com
Resource Parameter: oauth2_access_token
Resource URI: https://api.linkedin.com/v1/people/~:(id,firstName,lastName,headline,email-address)?format=json

Resources LinkedIn and OAuth2: https://developer.linkedin.com/docs/oauth2

OAuth 2.0 - Facebook

Step 1: Create a new Facebook App

Go to Facebook Developer, login and create a new Facebook App. You have to enter your App Name (e.g. “my-eSAW-Authenticator”), a contact email-address and a category.

Step 2: Configure your Facebook App

In your Facebook App dashboard and subpages you will find the API ID (similar to Client Token) and the App Secret (similar to Client Secret). You have to add a Facebook Login product to your app (OAuth2). In the settings page of your Facebook Login you can configure the OAuth Redirect URI (https://www.significant.com/esawviewer/HttpHandlers/AuthHandler.ashx).

For the scope you will need to add permissions, which can be found here. For this example we are using the following permissions: public_profile email user_about_me. It is important to separate the scopes with space ” “.

Step 3: Configure eSignAnyWhere

Open the Settings > Organization page and add a new OAuth 2.0 provider. Enter the Facebook credentials as below (see Facebook documentation for current configuration!). The Identifier is your unique identifier for using with API. The resources URIs are called for data, which will be stored in the audit-log (see Facebook documentation).

Client ID: your Facebook App ID
Client Secret: your Facebook App Secret
Scope: public_profile email user_about_me
Authorization URI: https://www.facebook.com/v2.8/dialog/oauth
Token URI: https://graph.facebook.com/v2.8/oauth/access_token
Logout URI: https://facebook.com
Resource Parameter: oauth_token
Resource URI: https://graph.facebook.com/v2.5/me?fields=id,name,first_name,middle_name,last_name,email,birthday

The configured Resource URI returns a JSON object with the specified parameter. These parameters can be defined in the fields to force a specific LinkedIn user to authenticate (e.g. email address). HINT: to see what data is returned in the Resource URI send yourself an envelope and have a look in the audit trail. It contains the returned object with its parameter. Note: Parameter in Resource URI of LinkedIn is not the same in the result (email vs. emailAddress).

The Resource URI will return data of the profile. With the “Graph API Explorer” you can build and test your own profile requests. With the optional configuration of “Fields” you can define fields, which are checked for authentication. So you can force a specific user (e.g. identified via email, id or birthdate) to authenticate. Other users are not accepted.

{
  "id": "5761459xxxxxx",
  "name": "Firstname Lastname",
  "first_name": "Firstname",
  "last_name": "Lastname",
  "email": "some@email.com",
  "birthday": "01/01/2000"
}

Resources

Facebook Developer: https://developers.facebook.com
Permissions: https://developers.facebook.com/docs/facebook-login/permissions/
Facebook API: https://developers.facebook.com/docs/graph-api/using-graph-api/

Force a Specific User to Authentication

You can force a specific user to authentication via checks in the authenticator (based e.g. on userid or email). Via API you configure the authentication with a “check”.

<authentications>
  <authentication>
    <!-- CustomAuthenticationProvider will be mapped to GenericOAuthProvider -->
    <method>CustomAuthenticationProvider</method>
    <parameter>nameofprovider</parameter>
    <checks>
      <check compareOperation="equals" fieldId="userprofile" value="a232656-6656-5665"></check>
    </checks>
  </authentication>
  <authentication>
    <method>CustomOAuthProvider</method>
    <parameter>nameofprovider</parameter>
      <checks>
      <check compareOperation="equals" fieldId="useremail" value="jordan@xyzmo.com"></check>
          <check compareOperation="equals" fieldId="userprofile" value="a232336-6656-5665"></check>
    </checks>
  </authentication>       
</authentications>

Advanced Document Tags

Here you can download a PDF which contains two recipient tags and some additional tags like a Checkbox and a Textfield.

Start and Endmarker in the Document [[tags]]

If you are using the Advanced Tags via API you have to call PrepareSendEnvelopeSteps_v1 to use them.
! required (optional)
* read only (optional)
fieldname String (required)
:signer1 Assigned to signer; “signer” or “signer1”, “signer2”, … (required)
:objecttype Type, e.g. signature, combobox, … (mandatory)
:property additional parameters (allow using of some short notation (e.g. l,r,c instead left, right, center, …))

Signature Fields

[[!sigField1:signer1:signature(sigType="Click2Sign,Draw2Sign",batch=1):label("some label"):size(width=150,height=60)]]

sigType, batch, label, size are optional.

Supported signature types: Click2Sign, Draw2Sign, Type2Sign, RemoteSignature, BiometricSignature, LocalCertificateSignature, DisposableCertificate, OtpSignature (as of October 2019, eSAW 3.6).


Attachments

[[myAttachment:signer:attachment:label("some label"):size(width=10,height=10)]]

label, size are optional.


Textfield

[[*myText:signer2:text(maxLength=100,password=1,multiline=true):default("default text"):font(name=Arial, color=#FF0000, size=12):alignment(left|right|center):size(width=10,height=10)]]

maxLength, mask, default, font, alignment, size, multiline are optional.


Checkbox

A required checked checkbox is for only one signer.

[[!chk1:signer:checkbox:size(width=10,height=10):checked]]

checked, size is optional.

RadioButton

All items of a group have to have the same name. Group of three RadioButtons for one recipient:

[[testRbnGroup:signer:radio(Red):size(width=10,height=10):checked]] [[testRbnGroup:signer:radio(Green):size(width=10,height=10)]] [[testRbnGroup:signer:radio(Blue):size(width=10,height=10)]]

checked, size is optional.


DropDown

[[myDrop:signer:dropdown(options="Red,Green,Blue",values="R,G,B",editable=1):default("R"):font(name=Arial, color=#FF0000, size=12):alignment(left|right|center):size(width=10,height=10)]]
values, editable, default, size, font, alignment are optional.


List

[[myList:signer:list(options="Red,Green,Blue",values="R,G,B",multiSelect=1):default("R"):font(name=Arial, color=#FF0000, size=12):alignment(left|right|center):size(width=10,height=10)]]

values, multiSelect, default, size, font, alignment are optional.


Offset

You can define a offset by using

offset(x=-10.5,y=-50.6)

The offset starts at the lower left position, is using points as units and numbers (double) as input. A positive x value moves to right and a positive y value moves up.

Note: this is support eSAW version 3.0+.


Variables

Use to reuse some fragments and allow an easier placement of the text markup into floating text.

Definition:

[[#myFontSettings=:font(name=Arial, color=#FF0000, size=12):alignment(left|right|center)]]

Usage:

[[myList:signer:list(options="Red,Green,Blue",values="R,G,B",multiSelect=1):default("R")$myFontSettings:size(width=10,height=10)]]

Input Validation

Input Validation is available with version 3.1.

  • Date
  • Requires a date field for signer1
  • [[!someDate:signer1:date(format="dd. MMMM yyyy"):range(from="13. März 2018",to="18. December 2019")]]
  • range is optional and must match with defined format
  • Email
  • optional for email field
  • [[someMail:signer:email()]]
  • Number
  • [[someNumber:signer:number(decimalPlaces=2,decimalSeparator=comma,thousandsSeparator=point,symbol="€",symbolLocation=endWithBlank):range(from="-300,00 €",to="5.000,00 €")]]
  • range, decimalSeparator, thousandsSeparator, symbol, symbolLocation, are optional
  • decimalSeparator: comma, point, apostrophe, none
  • thousandsSeparator: comma, point, apostrophe, blank, none
  • symbolLocation: start, startWithBlank, end, endWithBlank
  • range must match with defined format
  • Phone
  • [[somePhone:signer:phone(type=international)]]
  • type: international, internationalLeadingZero, internationalLeadingPlus
  • Time
  • [[someTime:signer:time(format="HH:mm"):range(from="12:00",to="18:00")]]
  • range is optional
  • range must match the defined format

REST example

For detailed information of using api calls in REST please also see this tutorial: Postman tutorial.

You can download the PDF for the following tutorial here.

To test it yourself, use the following endpoint: https://demo.esignanywhere.net/Api

  1. Prepare a PDF document
  2. Upload the document (uploadtemporary)
  3. Prepare the envelope (prepare)
  4. Send the envelope
  5. Result

Step 1: Prepare a PDF document

You can either prepare a PDF document with field markups or use this sample document: sample.

Step 2-4: Upload, prepare and send envelope

For these steps you can download the JSON file with the configurations here.

Result

REST Example for Input Validation

In the next collapse you can find a input validation example for REST. With this configuration only numbers from -300,00 to 5.000,00 are allowed in the Textfield.

Note: If you delete this section:

"Range": {
                "From": "-300,00 €",
                "To": "5.000,00 €"
         },

you can type in any numbers. If you define the same number for “FROM” and “TO” you can only type in the given number. For example if you define 400,00 for “FROM” and “TO” the recipient can only type in this number into the Text Field.

Please find a complete configuration for the input validation in the link below:

Input Validation Configuration

SOAP Example

For detailed information of using api calls with SOAP please also see this tutorial: Hello World Tutorial.

You can download the PDF for the following tutorial here.

To test it yourself, use the following endpoint: https://demo.esignanywhere.net/api.asmx?WSDL

  1. Prepare a PDF document
  2. Upload the document (UploadTemporarySspFile_v1)
  3. Prepare the envelope (PrepareSendEnvelopeSteps_v1)
  4. Send the envelope (SendEnvelope_v1)
  5. Result

Step 1: Prepare a PDF document

You can either prepare a PDF document with field markups or use this sample document: sample.

Step 2: Upload the document

Below you can find a configuration for uploading a document:

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:esig="http://www.eSignAnyWhere.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <esig:UploadTemporarySspFile_v1>
         <!--Optional:-->
         <esig:authorizationXml>
          &lt;authorization&gt;
          &lt;organizationKey&gt;##KEY##&lt;/organizationKey&gt;
          &lt;userLoginName&gt;##EMAIL##&lt;/userLoginName&gt;
          &lt;/authorization&gt;
         </esig:authorizationXml>
         <!--Optional:-->
         <esig:fileXml>
          &lt;file&gt;
          &lt;name&gt;eSignAnyWhere_Tutorial.pdf&lt;/name&gt;
          &lt;data&gt;    ##BASE64##&lt;/data&gt;
          &lt;/file&gt;
         </esig:fileXml>
      </esig:UploadTemporarySspFile_v1>
   </soapenv:Body>
</soapenv:Envelope>

Step 3: Prepare the envelope

The “PrepareSendEnvelopeSteps_v1” call parses the document. Therefore we get the exact positions of the field markups so that we can place them in the next step. Below you will find a sample for the adHoc workstep configuration which is needed for this call.

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:esig="http://www.eSignAnyWhere.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <esig:PrepareSendEnvelopeSteps_v1>
         <!--Optional:-->
         <esig:authorizationXml>
          &lt;authorization&gt;
          &lt;organizationKey&gt;##KEY##&lt;/organizationKey&gt;
          &lt;userLoginName&gt;##EMAIL##&lt;/userLoginName&gt;
          &lt;/authorization&gt;
         </esig:authorizationXml>
         <!--Optional:-->
         <esig:sspFileIds>
            <!--Zero or more repetitions:-->
            <esig:string>c82d180a-6f31-4eb0-bed3-2d332229797c</esig:string>
         </esig:sspFileIds>
         <!--Optional:-->
         <esig:adHocWorkstepConfiguration>
         &lt;AdhocWorkstepConfiguration&gt;
	 &lt;WorkstepLabel /&gt;			                   &lt;SmallTextZoomFactorPercent&gt;100&lt;/SmallTextZoomFactorPercent&gt;			&lt;WorkstepTimeToLiveInMinutes&gt;10&lt;/WorkstepTimeToLiveInMinutes&gt;
&lt;FinishAction /&gt;
&lt;NoSequenceEnforced&gt;0&lt;/NoSequenceEnforced&gt;
&lt;SigTemplate&gt;
&lt;width&gt;50.5&lt;/width&gt;
&lt;height&gt;100.5&lt;/height&gt;
&lt;/SigTemplate&gt;
&lt;ParseFormFields mapRequiredFieldsToRequiredTask=&quot;1&quot; formsGrouping=&quot;PerPage&quot; returnSimplifiedConfig=&quot;0&quot; addKeepExistingValueFlag=&quot;0&quot;&gt;1&lt;/ParseFormFields&gt;
&lt;AdhocPolicies&gt;				&lt;AllowModificationsAfterSignature&gt;1&lt;/AllowModificationsAfterSignature&gt;
&lt;/AdhocPolicies&gt;
&lt;PictureAnnotationConfigurationDefaults&gt;
&lt;MinResolution&gt;100&lt;/MinResolution&gt;
&lt;MaxResolution&gt;300&lt;/MaxResolution&gt;
&lt;ColorDepth&gt;Color16M&lt;/ColorDepth&gt;
&lt;/PictureAnnotationConfigurationDefaults&gt;
&lt;signaturePluginConfiguration&gt;
&lt;PdfSignatureProperties_V1&gt;
&lt;PdfAConformant&gt;0&lt;/PdfAConformant&gt;					&lt;PAdESPart4Compliant&gt;0&lt;/PAdESPart4Compliant&gt;					&lt;IncludeSigningCertificateChain&gt;0&lt;/IncludeSigningCertificateChain&gt;				&lt;SigningCertificateRevocationInformationIncludeMode&gt;DoNotInclude&lt;/SigningCertificateRevocationInformationIncludeMode&gt;
&lt;/PdfSignatureProperties_V1&gt;
&lt;PdfSignatureCryptographicData_V1&gt;					&lt;SignatureHashAlgorithm&gt;Sha1&lt;/SignatureHashAlgorithm&gt;
&lt;SigningCertificateDescriptor&gt;						&lt;Identifier&gt;DDED02DC192573B722E8C027F0E47E63152EB822&lt;/Identifier&gt;
&lt;Type&gt;Sha1Thumbprint&lt;/Type&gt;
&lt;Csp&gt;Default&lt;/Csp&gt;
&lt;/SigningCertificateDescriptor&gt;
&lt;/PdfSignatureCryptographicData_V1&gt;
&lt;/signaturePluginConfiguration&gt;
&lt;SigStringParsingConfiguration&gt;
&lt;SigStringsForParsing&gt;
&lt;StartPattern&gt;`sig&lt;/StartPattern&gt;
&lt;EndPattern&gt;`&lt;/EndPattern&gt;
&lt;ClearSigString&gt;1&lt;/ClearSigString&gt;					&lt;SearchEntireWordOnly&gt;1&lt;/SearchEntireWordOnly&gt;
&lt;/SigStringsForParsing&gt;
&lt;/SigStringParsingConfiguration&gt;
&lt;GeneralPolicies&gt;			&lt;AllowSaveDocument&gt;1&lt;/AllowSaveDocument&gt;			&lt;AllowSaveAuditTrail&gt;0&lt;/AllowSaveAuditTrail&gt;			&lt;AllowRotatingPages&gt;1&lt;/AllowRotatingPages&gt;				&lt;AllowAppendFileToWorkstep&gt;0&lt;/AllowAppendFileToWorkstep&gt;				&lt;AllowAppendTasksToWorkstep&gt;0&lt;/AllowAppendTasksToWorkstep&gt;			&lt;AllowEmailDocument&gt;0&lt;/AllowEmailDocument&gt;				&lt;AllowPrintDocument&gt;0&lt;/AllowPrintDocument&gt;				&lt;AllowFinishWorkstep&gt;1&lt;/AllowFinishWorkstep&gt;			&lt;AllowRejectWorkstep&gt;1&lt;/AllowRejectWorkstep&gt;				&lt;AllowRejectWorkstepDelegation&gt;0&lt;/AllowRejectWorkstepDelegation&gt;			&lt;AllowUndoLastAction&gt;1&lt;/AllowUndoLastAction&gt;				&lt;AllowColorizePdfForms&gt;0&lt;/AllowColorizePdfForms&gt;				&lt;AllowAdhocPdfAttachments&gt;1&lt;/AllowAdhocPdfAttachments&gt;				&lt;AllowAdhocSignatures&gt;1&lt;/AllowAdhocSignatures&gt;				&lt;AllowAdhocStampings&gt;1&lt;/AllowAdhocStampings&gt;				&lt;AllowAdhocFreeHandAnnotations&gt;1&lt;/AllowAdhocFreeHandAnnotations&gt;			&lt;AllowAdhocTypewriterAnnotations&gt;1&lt;/AllowAdhocTypewriterAnnotations&gt;		&lt;AllowAdhocPictureAnnotations&gt;0&lt;/AllowAdhocPictureAnnotations&gt;		&lt;AllowAdhocPdfPageAppending&gt;1&lt;/AllowAdhocPdfPageAppending&gt;
&lt;/GeneralPolicies&gt;
&lt;/AdhocWorkstepConfiguration&gt;
         </esig:adHocWorkstepConfiguration>
         <!--Optional:-->
         <esig:prepareSendEnvelopeStepsDescriptor>
          &lt;prepareSendEnvelopeStepsDescriptor&gt;
	  &lt;clearFieldMarkupString&gt;1&lt;/clearFieldMarkupString&gt;
          &lt;/prepareSendEnvelopeStepsDescriptor&gt;
         </esig:prepareSendEnvelopeStepsDescriptor>
      </esig:PrepareSendEnvelopeSteps_v1>
   </soapenv:Body>
</soapenv:Envelope>
Note: The following lines of code of the prepare_example are the configuration of the fieldmarkups. You can either decide to clear the field markup strings or not with the value (0,1). In this example we clear the strings because we have no use of them later.

<esig:prepareSendEnvelopeStepsDescriptor>
         &lt;prepareSendEnvelopeStepsDescriptor&gt;
         &lt;clearFieldMarkupString&gt;1&lt;/clearFieldMarkupString&gt;
         &lt;/prepareSendEnvelopeStepsDescriptor&gt;
</esig:prepareSendEnvelopeStepsDescriptor>
After a successful configuration you get a new workstep configuration including the form fields at the end. With the sample PDF the addFormFields section of the new workstep configuration should look like:

<addFormFields>
        <document docRef="1">
          <textBox name="myText1" readOnly="false" required="true" x="72" y="563.477001953125" width="200" height="65.149999999999991" page="1">
            <fontSettings>
              <textColor>#FF0000</textColor>
              <fontName>Arial</fontName>
              <fontSize>12</fontSize>
              <fontStyleBold>false</fontStyleBold>
              <fontStyleItalic>false</fontStyleItalic>
              <textAlign>Center</textAlign>
            </fontSettings>
            <value>Place for signer1</value>
            <maxLength>100</maxLength>
            <isMultiLine>false</isMultiLine>
            <isPassword>false</isPassword>
            <isFileSelect>false</isFileSelect>
            <isScrollAllowed>false</isScrollAllowed>
            <isComb>false</isComb>
          </textBox>
          <checkBox name="chk1" readOnly="false" required="true" x="72" y="439.802001953125" width="25" height="25" page="1">
            <isChecked>true</isChecked>
          </checkBox>
        </document>
      </addFormFields>
The following lines of code of the prepare_example are the configuration of the fieldmarkups. You can either decide to clear the field markup strings or not with the value (0,1). In this example we clear the strings because we have no use of them later.
<esig:prepareSendEnvelopeStepsDescriptor>
         &lt;prepareSendEnvelopeStepsDescriptor&gt;
         &lt;clearFieldMarkupString&gt;1&lt;/clearFieldMarkupString&gt;
         &lt;/prepareSendEnvelopeStepsDescriptor&gt;
</esig:prepareSendEnvelopeStepsDescriptor>

After a successful configuration you get a new workstep configuration including the form fields at the end. With the sample PDF the addFormFields section of the new workstep configuration should look like:

<addFormFields>
        <document docRef="1">
          <textBox name="myText1" readOnly="false" required="true" x="72" y="563.477001953125" width="200" height="65.149999999999991" page="1">
            <fontSettings>
              <textColor>#FF0000</textColor>
              <fontName>Arial</fontName>
              <fontSize>12</fontSize>
              <fontStyleBold>false</fontStyleBold>
              <fontStyleItalic>false</fontStyleItalic>
              <textAlign>Center</textAlign>
            </fontSettings>
            <value>Place for signer1</value>
            <maxLength>100</maxLength>
            <isMultiLine>false</isMultiLine>
            <isPassword>false</isPassword>
            <isFileSelect>false</isFileSelect>
            <isScrollAllowed>false</isScrollAllowed>
            <isComb>false</isComb>
          </textBox>
          <checkBox name="chk1" readOnly="false" required="true" x="72" y="439.802001953125" width="25" height="25" page="1">
            <isChecked>true</isChecked>
          </checkBox>
        </document>
      </addFormFields>

Step 4: Send the envelope

After you received the new workstep configuration you can now send it to recipients. If you want to use another workstep configuration but with the same form fields you can just add these form fields to the configuration. Below is a sample workstep configuration and the form fields for the sending api call.

<soap:Header />
   <soap:Body>
      <esig:SendEnvelope_v1>
         <!--Optional:-->
         <esig:authorizationXml>
            &lt;authorization&gt;
               &lt;organizationKey&gt;##KEY##&lt;/organizationKey&gt;
               &lt;userLoginName&gt;##EMAIL##&lt;/userLoginName&gt;
            &lt;/authorization&gt;
         </esig:authorizationXml>
         <!--Optional:-->
         <esig:sspFileIds>
            <esig:string>0c078eb3-d7a6-4853-adca-4375940f68c0</esig:string>
         </esig:sspFileIds>
         <!--Optional:-->
         <esig:envelopeDescriptionXml>
&lt;envelope&gt;
   &lt;name&gt;eSignAnyWhere Tutorial&lt;/name&gt;
   &lt;eMailSubject&gt;Document of eSignAnyWhere Tutorial&lt;/eMailSubject&gt;
   &lt;eMailBody&gt;Dear #RecipientFirstName#! Please sign this tutorial document.&lt;/eMailBody&gt;
   &lt;enableReminders&gt;True&lt;/enableReminders&gt;
   &lt;firstReminderDayAmount&gt;1&lt;/firstReminderDayAmount&gt;
   &lt;recurrentReminderDayAmount&gt;1&lt;/recurrentReminderDayAmount&gt;
   &lt;beforeExpirationReminderDayAmount&gt;1&lt;/beforeExpirationReminderDayAmount&gt;
   &lt;daysUntilExpire&gt;2&lt;/daysUntilExpire&gt;
   &lt;!-- callback to your backend system on a completed envelope 
   &lt;callbackUrl&gt;http://172.16.17.78:57550/default.aspx?EnvelopeId=##EnvelopeId##&amp;amp;myParamForMe=1234&lt;/callbackUrl&gt; 
   --&gt;
   &lt;callbackUrl /&gt;
   &lt;steps&gt;
      &lt;step&gt;
         &lt;emailBodyExtra /&gt;
         &lt;orderIndex&gt;1&lt;/orderIndex&gt;
         &lt;recipientType&gt;Signer&lt;/recipientType&gt;
         &lt;recipients&gt;
            &lt;recipient&gt;
               &lt;languageCode&gt;en&lt;/languageCode&gt;
               &lt;eMail&gt;##EMAIL##&lt;/eMail&gt;
               &lt;firstName&gt;Alice&lt;/firstName&gt;
               &lt;lastName&gt;Somename&lt;/lastName&gt;
            &lt;/recipient&gt;
         &lt;/recipients&gt;
         &lt;workstepConfiguration&gt;
   &lt;WorkstepLabel /&gt;
   &lt;SmallTextZoomFactorPercent&gt;100&lt;/SmallTextZoomFactorPercent&gt;
   &lt;WorkstepTimeToLiveInMinutes&gt;11520&lt;/WorkstepTimeToLiveInMinutes&gt;
   &lt;FinishAction /&gt;
   &lt;signatureTemplate&gt;
      &lt;version&gt;1.2.0.2&lt;/version&gt;
      &lt;positionUnits&gt;PdfUnits&lt;/positionUnits&gt;
      &lt;positionReferenceCorner&gt;Lower_Left&lt;/positionReferenceCorner&gt;
      
   &lt;/signatureTemplate&gt;
   &lt;Policy version=&quot;1.1.0.0&quot;&gt;
      &lt;GeneralPolicies&gt;
         &lt;AllowSaveDocument&gt;1&lt;/AllowSaveDocument&gt;
         &lt;AllowSaveAuditTrail&gt;1&lt;/AllowSaveAuditTrail&gt;
      &lt;/GeneralPolicies&gt;
      &lt;WorkstepTasks SequenceMode=&quot;SequenceOnlyRequiredTasks&quot; originalSequenceMode=&quot;SequenceOnlyRequiredTasks&quot;&gt; 
      &lt;/WorkstepTasks&gt;
   &lt;/Policy&gt;
   &lt;TransactionCodeConfigurations&gt;
      &lt;TransactionCodeConfiguration trConfId=&quot;&quot;&gt;
         &lt;Message&gt;Please sign the document with the transactionId {tId} with the code: {Token}&lt;/Message&gt;
         &lt;hashAlgorithmIdentifier&gt;Sha256&lt;/hashAlgorithmIdentifier&gt;
      &lt;/TransactionCodeConfiguration&gt;
      &lt;TransactionCodeConfiguration trConfId=&quot;Trans1&quot;&gt;
         &lt;Message&gt;Please accept the transactionId {tId} with the code: {Token}&lt;/Message&gt;
         &lt;hashAlgorithmIdentifier&gt;Sha256&lt;/hashAlgorithmIdentifier&gt;
      &lt;/TransactionCodeConfiguration&gt;
   &lt;/TransactionCodeConfigurations&gt;
&lt;/workstepConfiguration&gt;
      &lt;/step&gt;
      &lt;step&gt;
         &lt;emailBodyExtra /&gt;
         &lt;orderIndex&gt;2&lt;/orderIndex&gt;
         &lt;recipientType&gt;CC&lt;/recipientType&gt;
         &lt;recipients&gt;
            &lt;recipient&gt;
               &lt;languageCode&gt;en&lt;/languageCode&gt;
               &lt;eMail&gt;##EMAIL##&lt;/eMail&gt;
               &lt;firstName&gt;Charly&lt;/firstName&gt;
               &lt;lastName&gt;Randomname&lt;/lastName&gt;
            &lt;/recipient&gt;
         &lt;/recipients&gt;
      &lt;/step&gt;
   &lt;/steps&gt;
 &lt;addFormFields&gt;
        &lt;document docRef=&quot;1&quot;&gt;
          &lt;textBox name=&quot;myText1&quot; readOnly=&quot;false&quot; required=&quot;true&quot; x=&quot;72&quot; y=&quot;563.477001953125&quot; width=&quot;500&quot; height=&quot;65.149999999999991&quot; page=&quot;1&quot;&gt;
            &lt;fontSettings&gt;
              &lt;textColor&gt;#FF0000&lt;/textColor&gt;
              &lt;fontName&gt;Arial&lt;/fontName&gt;
              &lt;fontSize&gt;12&lt;/fontSize&gt;
              &lt;fontStyleBold&gt;false&lt;/fontStyleBold&gt;
              &lt;fontStyleItalic&gt;false&lt;/fontStyleItalic&gt;
              &lt;textAlign&gt;Center&lt;/textAlign&gt;
            &lt;/fontSettings&gt;
            &lt;value&gt;This is the textfield we added with addFormFields within the SendEnvelope call&lt;/value&gt;
            &lt;maxLength&gt;200&lt;/maxLength&gt;
            &lt;isMultiLine&gt;false&lt;/isMultiLine&gt;
            &lt;isPassword&gt;false&lt;/isPassword&gt;
            &lt;isFileSelect&gt;false&lt;/isFileSelect&gt;
            &lt;isScrollAllowed&gt;false&lt;/isScrollAllowed&gt;
            &lt;isComb&gt;false&lt;/isComb&gt;
            &lt;/textBox&gt;
          &lt;checkBox name=&quot;chk1&quot; readOnly=&quot;false&quot; required=&quot;true&quot; x=&quot;72&quot; y=&quot;439.802001953125&quot; width=&quot;25&quot; height=&quot;25&quot; page=&quot;1&quot;&gt;
            &lt;isChecked&gt;true&lt;/isChecked&gt;
          &lt;/checkBox&gt;
        &lt;/document&gt;
      &lt;/addFormFields&gt;  
&lt;/envelope&gt;
         </esig:envelopeDescriptionXml>
      </esig:SendEnvelope_v1>
   </soap:Body>
</soap:Envelope>

Result

If you are using the QES you have to identify the signer first. This can be done via several ways. Contact your seller for more details.

QES with Disposable Certificate

To use the disposable certificate you just click the settings for the recipient to edit her/his information for the certificate. You need the following information:

  • Country of residence
  • Mobile phone (required for sending the one-time-password via SMS)
  • Social security number
  • Document number
  • Document issued by
  • Document issued on
  • Document expiry date
  • Document type (e.g. Driving License or Passport)

In the designer you have to select the signature field type as “Disposable Certificate”.

The signer will receive its email as usual and when the signer wants to sign a disposable certificate signature field he will get a one-time-password via SMS. The counter on the disposable certificate starts by signing the first signature.

If “Show disclaimer before certificate request” is enabled in Settings->Organization->Disposable Certificate the signer first receives the disclaimer before the SMS-OTP.

Note: There can be links in the disclaimer which the signer can follow directly by clicking.

When the document is finished you can validate, for example, the qualified electronic signature in Adobe Reader.

You can also send a disposable signature via api. To do this, you first have to upload a document and then add the signature and the disposable certificate data. Note: You have to add the disposable certificate data in the section “recipient”.

QES with Remote Certificate

If the user has a long lived certificate you can use the Digital Remote Signature option. It is similar to the disposable certificate, but you must not provide so much information, as the user is already registered. It is not required to define the User Id or Device Id, then the signer must enter the data himself.

In the designer you must select the Digital Remote Signature for the signature type.

P7M Signers

It is possible to define P7M signers in eSignAnyWhere (version 3.1+). This allows you to define at the end of a signing workflow to define signers with P7M. Due technical reasons it is not possible to add non-P7M signers after the first P7M signer. P7M is an advanced feature and must be enabled for you, so please contact your Namirial Sales.

The P7M signer can be defined in the recipient list (P7M Signer Type). The P7M signer has no assigned signature fields in the document, so you will not be able to assign signature fields, form fields or predefined fields for him or her.

When a workflow with a P7M signer is finished you will not receive a PDF document, but a signed P7M container with the PDF. Please see the next figure:

The workstepconfig must be extended with a invisibleSignature, Task and a document information:

<signatureTemplate>
	<InvisibleSig>
		<id>pkcs1</id>
		<TargetDocument>
			<DocRefNumber>1</DocRefNumber>
			<completed>0</completed>
		</TargetDocument>
		<TargetDocument>
			<DocRefNumber>2</DocRefNumber>
			<completed>0</completed>
		</TargetDocument>
		<TargetDocument>
			<DocRefNumber>3</DocRefNumber>
			<completed>0</completed>
		</TargetDocument>
	</InvisibleSig>
</signatureTemplate>

Taskdefinition:

<WorkstepTasks SequenceMode="SequenceOnlyRequiredTasks">
	<Task enabled="1" completed="0" required="0" id="pkcs1" displayName="" DocRefNumber="1" type="SignPkcs7" finishPercentage="0" />
</WorkstepTasks>

EnvelopeDocumentation:

<WorkStepInformation>
    ...
    <EnvelopeInformation>
        <EnvelopeDocumentInformation numberOfPages="1" DocRefNumber="1" name="" isOptionalDocument="0" isPkcs7="0" enabled="1" />
        <EnvelopeDocumentInformation numberOfPages="1" DocRefNumber="2" name="" isOptionalDocument="0" isPkcs7="0" enabled="1" />
        <EnvelopeDocumentInformation numberOfPages="1" DocRefNumber="3" name="" isOptionalDocument="0" isPkcs7="0" enabled="1" />
    </EnvelopeInformation>
	...
</WorkStepInformation>

Automatic Remote Signatures

With eSignAnyWhere version 3.2 the automatic remote signatures (automatic remote eSeal) are integrated. So you can setup, as user manager, automatic remote signature profiles for automatic signature.

If you create a workflow, a new type “Add Automatic” recipient is available. The automatic remote signature / eSealing is applied automatically to the document, if it is the automatic recipient turn. The workflow continues automatically with the next recipient after the automatic recipient.

  • Automatic Remote Signatures / eSealing are an optional eSignAnyWhere feature
  • User Managers can configure the automatic remote signature / eSealing profiles in the Organization settings page, when they have enabled the user option “Allow * * * Automatic eSealing”
  • Power use can use the automatic remote signature / eSealing profiles, if they have the user option “Allow Automatic eSealing” enabled

1) Automatic Remote Signature Profiles

The profiles for automatic remote signatures are managed via the organization’s settings page (so only by user managers). For creating an automatic remote signature profile you need a description (e.g. name), the username and the password.

Attention: if a power user wants to use the automatic remote signatures, the user must have enabled the user right “Allow automatic eSealing” (see “Settings” > “Users”).

2) User Settings

User must have enabled the option “Allow automatic eSealing” to use the automatic remote signatures / eSealing within a workflow.

3) Creating a workflow with automatic remote signatures

In the eSAW UI you can add an automatic signer / eSealing via button in the recipient list “Add Automatic”. Then the profile must be selected for the automatic signature / eSealing.

Attention: the power user must have the right “Allow automatic eSealing” enabled (see “Settings” > “Users”).

Creating the Automatic Remote Signature via API

Via API you have to use a new recipient type (“Automatic”). Moreover the workstepConfiguration must contain information about the automatic remote signature. As additional option, you can use more than one profile for the workstep configuration at once via API. Note: this leads to a missing information in eSAW UI!

1) Envelope XML with new recipient type “Automatic”

<envelope>
  ...
  <steps>
    <step>
      <emailBodyExtra></emailBodyExtra>
      <orderIndex>1</orderIndex>
      <recipientType>Automatic</recipientType>
      <workstepConfiguration skipThirdPartyChecks="0">
      ...
      </workstepConfiguration>
      </step>
  </steps>
</envelope>

2) Workstep Configuration

2.1) Define Signature Field in WorkstepConfiguration
<sig id="GENERIC_SIG_IDENTIFIER">
  <DocRefNumber>1</DocRefNumber>
  <param name="enabled">1</param>
  <AllowedSignatureTypes>
    <sigType id="automatic" type="AutomaticSignature" preferred="0">
	  <trModType>RemoteSignature</trModType>
	  <ImageRenderingLanguage>en</ImageRenderingLanguage>
	  <SealingProfileId>SEALING_PROFILE_IDENTIFIER_FROM_ORGANIZATION_SETTINGS</SealingProfileId>
    </sigType>
  </AllowedSignatureTypes>
</sig>
The sealing profile identifier can be found in the organization settings page at the automatic remote signature settings (Identifier).
2.3) Finalize Action in WorkstepConfiguration Policy
<Policy version="1.1.0.0">
  <FinalizeActions>
	<AutomaticSignature sigId="GENERIC_SIG_IDENTIFIER" />
  </FinalizeActions>
</Policy>

A-Trust

For the A-Trust signature configuration you need an A-Trust Signaturbox first. For more information please contact us.

In this section you can find the configuration for the A-Trust signature. First we have to upload a PDF with the API call UploadTemporarySspFile_v1. After uploading the document we can now send the document with the following workstep configuration to define the A-Trust signature:

<envelope>
   <name>eSignAnyWhere Tutorial</name>
   <eMailSubject>Document of eSignAnyWhere Tutorial</eMailSubject>
   <eMailBody>Dear #RecipientFirstName#! Please sign this tutorial document.</eMailBody>
   <enableReminders>True</enableReminders>
   <firstReminderDayAmount>1</firstReminderDayAmount>
   <recurrentReminderDayAmount>1</recurrentReminderDayAmount>
   <beforeExpirationReminderDayAmount>1</beforeExpirationReminderDayAmount>
   <daysUntilExpire>2</daysUntilExpire>
   <!-- callback to your backend system on a completed envelope 
   <callbackUrl>http://172.16.17.78:57550/default.aspx?EnvelopeId=##EnvelopeId##&amp;myParamForMe=1234</callbackUrl> 
   -->
   <callbackUrl />
   <steps>
      <step>
         <emailBodyExtra />
         <orderIndex>1</orderIndex>
         <recipientType>Signer</recipientType>
         <recipients>
            <recipient>
               <languageCode>en</languageCode>
               <eMail>##EMAIL##</eMail>
               <firstName>Alice</firstName>
               <lastName>Somename</lastName>
            </recipient>
         </recipients>
       <workstepConfiguration>
   <WorkstepLabel />
   <SmallTextZoomFactorPercent>100</SmallTextZoomFactorPercent>
   <WorkstepTimeToLiveInMinutes>11520</WorkstepTimeToLiveInMinutes>
   <FinishAction />
   <signatureTemplate>
        <version>1.2.0.2</version>
        <positionUnits>PdfUnits</positionUnits>
        <positionReferenceCorner>Lower_Left</positionReferenceCorner>
        <sig id="1">
            <positionPage>1</positionPage>
            <DocRefNumber>1</DocRefNumber>          
            <positionX>10</positionX>           
            <positionY>10</positionY>           
            <width>200</width>         
            <height>50</height>           
            <param name="enabled">1</param>          
            <param name="completed">0</param>           
            <param name="sigType">ExternalSigningProcess</param>            
            <param name="positioning">onPage</param>            
            <param name="trModType">ATrustHandySignatur</param>       
            <param name="aTrustTemplateId">4246</param>
        </sig>
    </signatureTemplate>
  <receiverInformation>
        <userInformation>
            <firstName>FirstName</firstName>
            <lastName>LastName</lastName>
            <eMail />
        </userInformation>
        <aTrustCertificateData>
            <!--Used to prefill the phone number for A-Trust Handysignatur-->
            <phonenumber>##phone number##</phonenumber>
        </aTrustCertificateData>
        <!--Defines, if the disclaimer for Namirial disposable certificates should be shown.-->
        <showNamirialDisposableDisclaimer>0</showNamirialDisposableDisclaimer>
    </receiverInformation>   
   <Policy version="1.1.0.0">
      <GeneralPolicies>
      </GeneralPolicies>       
	<TypewriterAnnotationTaskInfo />
      <WorkstepTasks SequenceMode="SequenceOnlyRequiredTasks" originalSequenceMode="SequenceOnlyRequiredTasks">      
 <Task enabled="1" completed="0" required="1" id="1" displayName="SignField 1" DocRefNumber="1" type="SignField" internalAllConcernedDocRefNumbersList="1" allRequiredFieldsFilledOnWorkstepCreation="0" />
      </WorkstepTasks>
   </Policy>
   <TransactionCodeConfigurations>
      <TransactionCodeConfiguration trConfId="">
         <Message>Please sign the document with the transactionId {tId} with the code: {Token}</Message>
         <hashAlgorithmIdentifier>Sha256</hashAlgorithmIdentifier>
      </TransactionCodeConfiguration>
      <TransactionCodeConfiguration trConfId="Trans1">
         <Message>Please accept the transactionId {tId} with the code: {Token}</Message>
         <hashAlgorithmIdentifier>Sha256</hashAlgorithmIdentifier>
      </TransactionCodeConfiguration>
   </TransactionCodeConfigurations>
</workstepConfiguration>
      </step>
      <step>
         <emailBodyExtra />
         <orderIndex>2</orderIndex>
         <recipientType>CC</recipientType>
         <recipients>
            <recipient>
               <languageCode>en</languageCode>
               <eMail>##EMAIL##</eMail>
               <firstName>Charly</firstName>
               <lastName>Randomname</lastName>
            </recipient>
         </recipients>
      </step>
   </steps>
</envelope>

The code below shows where you can find the configuration of the signature:

       <sig id="1">
           <positionPage>1</positionPage>
           <DocRefNumber>1</DocRefNumber>          
           <positionX>10</positionX>           
           <positionY>10</positionY>           
           <width>200</width>         
           <height>50</height>           
           <param name="enabled">1</param>          
           <param name="completed">0</param>           
           <param name="sigType">ExternalSigningProcess</param>            
           <param name="positioning">onPage</param>            
           <param name="trModType">ATrustHandySignatur</param>       
           <param name="aTrustTemplateId">4246</param>
       </sig>

The second code below shows the configuration of the phone number for the recipient:

       <aTrustCertificateData>
           <phonenumber>##phone number##</phonenumber>
       </aTrustCertificateData>

If you enter the phone number then the recipient can not enter another number. However, if you do not define a phone number then the recipient is free to choose a phone number of their choice.

BankID

In this section you can find the configuration for the bankID signature.

Hyperlinks

eSaw allows hyperlinks on documents. These links can be configured in the workstep configuration.

FAQ

Installation

How can I use remote certificates for a qualified electronic signature - QES e.g. disposal certificates?
For the remote certificate feature (after eIDAS) you have to sign a LRA (Location Registration Authority) contract with Namirial. Please contact your Namirial consultant for further information.
The eSignAnyWhere Notification service setup is stuck and the service will not startup at all.
Please have a look at the log, it probably will state the correct error. Most likely the database is not set-up correctly or the user that is running the service (= default is the NetworkService user) does not have the necessary credentials to access the database or the storage.

Configuration

I changed the configuration _global.xml, but they are not set.
You also have to restart the eSignAnyWhere Notification Service to reload the configuration settings.
Emails are not sent by eSignAnyWhere.
Check your logs and SMTP configuration and test it manually (e.g. with telnet). If configuration check is correct it may be a connection issue (firewalls, client, authentication, ...).

SDK Documentation

API Documentation

We declared SOAP as deprecated and therefore SOAP will not be included in versions after 20.76. Latest release including SOAP API for eSAW will be 20.76, released in spring 2021 and with the software maintenance on 20.76 until spring 2023.

Therefore, we recommend REST technology for integration. Please see also the migration guide.

API and Samplecode

The API is for developers, who want to integrate eSignAnyWhere into their application and for administrators, who want to script interactions with eSignAnyWhere (e.g. user synchronization).

Quick Overview: eSAW uses REST or SOAP (with JSON or XML) as API. We recommend the REST interface. The basic workflow is to upload a document (uploadTemporarySspFile) and then call sendEnvelope with a envelope configuration. The configuration consists out of the envelope part (workflow configuration) and for each recipient a definition and a signing configuration (workstep configuration). The workstep configuration is the description (as JSON for REST) of tasks for signer (e.g. Signature Fields, Form-Fields) and additional document configurations.

The easiest way to start is enabling the DeveloperMode for a user. As developer (and power user) you can send envelopes via eSignAnywhere in the UI and download the complete envelope configuration (including the workstep configurations). So eSAW can be a seen as configuration designer, where you can easily prepare the envelope configuration. After you downloaded the configuration you just have to replace the recipient information and configuration.

Resources

API Reference* visit API Reference (eSAW & Usermanagement)
eSAW SOAP API endpoint
https://demo.esignanywhere.net/api.asmx
eSAW SOAP WSDL https://demo.esignanywhere.net/api.asmx?WSDL
Usermanagement SOAP API endpoint https://demo.esignanywhere.net/UserManagementApi.asmx
Usermanagement SOAP WSDL https://demo.esignanywhere.net/UserManagementApi.asmx?WSDL
REST with JSON + Swagger
( eSAW v3.1+)
https://demo.esignanywhere.net/Api
Migration Guides* Migration Guide (REST Api) and Migration Guide (SOAP to REST)
Sample Code in C# and Java Here you can find the C# sample: Download. (Contains examples with SOAP and REST until eSAW 3.4 features).

Here you can find the java sample: Download. (Contains example with REST, developed with JavaSE-12)

Tutorial: Hello World* visit Hello World Tutorial
Tutorial: SoapUI (SOAP) visit SoapUI Tutorial
Tutorial: Postman* (REST)
REST in SOAPUI
visit Postman Tutorial
visit REST in SOAPUI Tutorial
Developer mode* visit developer mode
SignAnyWhere Viewer 2019 visit SignAnyWhere Viewer 2019 Information
SignAnyWhere Viewer Extended Customization visit SignAnyWhere Viewer Extended Customization
The Envelope XML and WorkstepConfiguration XML visit Envelope XML Guide
Tutorial: Java Library Tutorial and Sample Code visit Java Library Tutorial
Integration & Use Cases visit Integration & Use Cases
How To’s visit How To Guides
Developer FAQ visit Developer FAQ
eSAW Error Codes visit eSAW Error Codes

* Recommended

The User Guide, Signer Guide and Administration Guide (for on-premise customers) can be also helpful.

SOAP calls with XML/REST with JSON

SOAP uses XML, which have to be encoded via HTML special charaters (“<” in “<” and “>” in “>”). Higher programming languages takes automatically care of the conversion, so just in lower languages it is required (or also SoapUI). If this encoding is not done you will receive a HTTP 400 Bad Request error.

REST uses JSON. We recommend to have a look in the sample code first, otherwise Swagger UI is available for integration, which is available under /api (demo.xyzmo.com/api or esignanywhere.net/api).

Authentication

For authentication, you’ll need a application key and your email-address. You can find this information in Settings / Organization / Application key. Note that all API methods require authentication. Start with the Hello World, SoapUI Tutorial or Postman Tutorial (REST) and you might have a look in the envelope XML guide. Please note, that the email is automatically the user, who sends the envelope.

<!-- SOAP XML Authentication -->
<authorization>
 <organizationKey>4647688a-xxxx-xxxx-xxxx-xxxxxxxx</organizationKey>
 <userLoginName>your@email.address</userLoginName>
</authorization>

SOAP Response and Errors

The SOAP response is a XML datastructure with the state of the response and the response itself. In baseResult you see the state of the call (ok/failed) and in errorInfo or okInfo the response of your request. In case of an error a helpful message is in the errorInfo.

The following you see an authorization error:

<apiResult version="2.2.458.6616">
 <baseResult>failed</baseResult>
 <errorInfo>
   <error>ERR0011</error>
   <errorMsg>ERR0011: Parameter apiAuthorizationXml is incorrect: Failed to parse</errorMsg>
 </errorInfo>
</apiResult>

REST/JSON + XML (Deprecated)

The REST with JSON and inline XML is deprecated. Please use the REST/JSON interface (https://www.esignanywhere.net/api).

You have to use HTTP-POSTs, set the content-type to application/json, and wrap the parameter into a JSON object for the request content. Furthermore, the result is wrapped in a JSON object with a single property.

Sample for the method string DisposeSspFile_v1(string authorizationXml, string sspFileId):

  • HTTP Post Request to YOURSERVER\Api.asmx\DisposeSspFile_v1
  • Add HTTP header content-type=application/json

Request content:

{
 "authorizationXml" : "<authorization>...<\/authorization>",
 "sspFileId" : "MyFileId" 
}

Request response:

{
"d": "<apiResult>...</apiResult>"
}

eSAW API description for SOAP

SOAP API endpoint is https://www.significant.com/api.asmx
WSDL can be found here: SOAP API

Methods for sending an envelope or to create a draft of an envelope

An envelope can consist of multiple documents and can contain multiple recipients for signing (steps). Your backend application will provide the documents for the envelope and the configuration of the workflow and worksteps. Once the envelope has been completed or rejected, your backend will be notified from eSignAnyWhere about this (callback). Therefore you can provide a callback url, so you don’t need to poll the eSAW system.

The pattern for sending an envelope

Upload all documents for this envelope (UploadTemporarySspFile_v1) Optional: Analyze all documents to get a default configuration. (GetAdHocWorkstepConfiguration_v1) Optional: Prepare configuration for every signing step in the envelope, by adjusting the xml accordingly. Start the workflow of the envelope by providing the general configuration of the envelope and the configuration for every step (SendEnvelope_v1)

The pattern for creating a draft of an envelope:

Upload all documents for this envelope (UploadTemporarySspFile_v1) Create the draft by providing the general configuration of the envelope (CreateDraft_v1) You can redirect the user to the designer of eSignAnyWhere to manually position and assign fields for the recipients pf this envelope.

Methods for downloading the documents of an completed envelope

Once you get the notification from eSignAnyWhere that an envelope has been completed, you can download the signed documents and the log of the envelope.

The pattern for downloading documents of a completed envelope

Check the status of that Envelope, to be sure it is completed and not rejected. (GetEnvelopeById_v1)

Download all the signed documents and the envelope log. (DownloadCompletedDocument_v1)

Methods for managing an envelope

SendReminders_v1: Send reminders to all recipients that currently can sign the envelope
CancelEnvelope_v1: Cancels the envelope
DeleteEnvelope_v1: Delets an envelope or a draft of an envelope
RestartEnvelope_v1: Restarts an expired envelope
Please see: https://www.significant.com/api.asmx?WSDL

eSignAnywhere.Api V5

Before you use the API, we recommend you to read the API Documentation, to get an overview about our programming interface, data types and basic concepts.

General Concepts

  • The application includes user authentication on application level. Therefore, it is required to provide credentials for authorization (UserLoginName + OrganizationKey). The OrganizationKey is an API-Key.
  • On status change, our back-end notifies integrations by calling an HTTP(S) endpoint as a callback.
  • Error handling:
  • HTTP 40x for handled errors
  • In a HTTP 40x we return an error code and an error info
  • or HTTP 500 for generic server errors
  • Callbacks
  • Envelope callbacks: This is the basic callback which is fired if the envelope reaches a final state
  • Envelope status callback: Is fired, based on envelope events/actions
  • Draft callback: Is fired, if a draft is used or deleted

For more details please check Here.

Tutorial Hello World

eSignAnyWhere can be easily implemented. This tutorial shows you how to send your first envelope via api REST service of eSignAnyWhere. If you are using Postman for your REST calls please also have a look at the following Tutorial: Postman Tutorial.

Please also see the developer mode for this tutorial: Developer Mode.

For this tutorial you can use your desired programming language (with REST support) or any REST tool (e. g. Postman). Moreover you will need an active eSignAnyWhere account for the authorization. (Even a trial account will work).

ONLY for SOAP: If you want to use SOAP for your API calls you can use SoapUI. For this tool you can find a tutorial here: SoapUI Sample. For SOAP you might be also interested in the envelope XML guide which explains you more about the XML configuration.

The REST URI of eSignAnyWhere is: https://demo.esignanywhere.net/Api/v4.0/ here you can find the Swagger: https://demo.esignanywhere.net/Api

The SOAP endpoint of eSignAnyWhere is: https://demo.esignanywhere.net/api.asmx

What the Tutorial is About

The tutorial will show you the following basic use-case: <tabs> <tab name="REST"></tab> <tab name="SOAP"></tab> </tabs>

First we will have an easy api call to start with and then we will implement the above shown use case. Basically you simply upload a document. After the upload you will receive a documentId, which you need for creating an envelope with a JSON configuration. This configuration contains information about the envelope itself, workflow steps, signer information, policies and many more. After the envelope is created successful the workflow starts automatically. The eSignAnyWhere system will use callbacks (you can configure them in the envelope JSON configuration) to notify you if the envelope status has changed.

Your First Api Call

First we will try the connection with a version request. You can find the endpoints in the next table:

REST SOAP
https://demo.esignanywhere.net/Api/v4.0/version* GetVersion_v1*

*The version api call does not need authorization

The response should be like the following in REST:

{
   "Success": true,
   "Version": "3.7.78.14788"
}

and in SOAP:

<apiResult version="3.7.78.14788">
 <baseResult>ok</baseResult>
</apiResult>

Almost all API calls are expecting an authorization. Therefore, your organization key and your email-address of a PowerUser is required. You can find the organization key in the Settings/Organization/Application in eSignAnyWhere. The email-address and the name of the PowerUser is used for sending the email.

You can configure the configuration for the authorization for example in Postman if you write your organization key and your email in the headers of the API call. For more information please have a look at the postman tutorial.

SOAP ONLY: The authorization XML has to be encoded via HTML special characters (“<” in “<” and “>” in “>”). If this encoding is not done you will receive a HTTP 400 Bad Request error. Higher programming languages takes automatically care of the conversation, so just in lower languages it is required (or also SOAPUI). You can find a configuration for the authorization for SOAP (XML) in the next lines:

<authorization>
   <organizationKey>4647688a-xxxx-xxxx-xxxx-xxxxxxxx</organizationKey>
   <userLoginName>your@email.address</userLoginName>
</authorization>
Inline-XML (with HTML special characters):
 &lt;authorization&gt;
   &lt;organizationKey&gt;4647688a-xxxx-xxxx-xxxx-xxxxxxxx&lt;/organizationKey&gt;
   &lt;userLoginName&gt;your@email.address&lt;/userLoginName&gt;
&lt;/authorization&gt;

Errors: For REST you get an HTTP status for the calls (for example: 200 OK or 401 unauthorized).

SOAP ONLY: In case of errors, the error message is part of the response. In baseResult you can see the state of the call (ok/failed) and in the error-Info or ok-Info the response. 

The following code shows you an authorization error:

<apiResult version="2.2.458.6616">
 <baseResult>failed</baseResult>
  <errorInfo>
    <error>ERR0011</error>
    <errorMsg>ERR0011: Parameter apiAuthorizationXml is incorrect: Failed to parse</errorMsg>
  </errorInfo>
</apiResult>

Upload Document

This call needs the authorization

First we have to upload a document. This will return a documentId, to use the document for creating an envelope. Therefore, we will use the following endpoints:

REST SOAP
https://demo.esignanywhere.net/Api/v4.0/sspfile/uploadtemporary UploadTemporarySspFile_v1

For this tutorial we just use a simple PDF document.

SOAP ONLY:
You need to Base64 encode the file.
<file>
  <name>eSignAnyWhere_Tutorial.pdf</name>
  <data>##BASE64-FILE-CONTENT##</data>
</file>
This XML also has to be encoded via HTML special characters (“<” in “<” and “>” in “>”).

The response after a successfull upload of the file is the document id (SspFileId).

You need the document Id for creating your first envelope. After uploading the file it is just temporary on the server. After 10 minutes it will be deleted and you are not able to use it again. The moment you are creating an envelope with the file, it gets the time-to-live of the envelope. Attention: The returned file id is just for creating an envelope. Once the envelope is created, the file id becomes invalid, so for downloading a finished file, you have to retrieve the id from the envelope status with the following URI for REST: https://demo.esignanywhere.net/Api/v4.0/envelope/##envelopeId## (Replace the placeholder ##envelopeId## with your envelope id.

Get Workstep Configuration

This step is only optional! But required if you do not have a workstep configuration. A workstep configuration is a definition of a signing task for one recipient. So it contains information about signature fields on the document, form-fields, etc. With the new Developer-Feature of eSignAnyWhere 2.6 it is not required anymore.

A workstep configuration is required for each signing step in your workflow. If you have already your workstep configuration you can skip this step. Moreover you can generate a workstep configuration with the SIGNificant Workstep Designer (Note: Only for XML). The SIGNificant Workstep Designer allows you as a developer to configure a SignAnyWhere workstep, set signature fields and types and many more. You can also use the developer mode for JSON (REST) and SOAP(XML).

To receive an adhoc workstep configuration you can use the following endpoint:

REST SOAP
https://demo.esignanywhere.net/Api/v4.0/envelope/prepare GetAdHocWorkstepConfiguration_v1

You can find a sample configuration for this call in the next section.

<tabs>

<tab name="REST (JSON)">
{
  "SspFileIds": [
    "##FileId##"
  ],
  "AdHocWorkstepConfiguration": {
    "WorkstepLabel": "string",
    "SmallTextZoomFactorPercent": 0,
    "WorkstepTimeToLiveInMinutes": 0,
    "FinishAction": {
      "ClientActions": [
        {
          "RemoveDocumentFromRecentDocumentList": true,
          "CallClientActionOnlyAfterSuccessfulSync": true,
          "ClientName": "string",
          "CloseApp": true,
          "Action": "string"
        }
      ]
    },
    "NoSequenceEnforced": true,
    "SigTemplate": {
      "Size": {
        "Height": 0,
        "Width": 0
      },
      "AllowedSignatureTypes": [
       
      ]
    },
    "ParseFormFields": {
      "MapRequiredFieldsToRequiredTask": true,
      "FormsGrouping": "PerPage",
      "ReturnSimplifiedConfig": true,
      "AddKeepExistingValueFlag": true,
      "ParseFormField": true
    },
    "AdhocPolicies": {
      "AllowModificationsAfterSignature": true
    },
    "ViewerPreferences": {
      "ShowPageNavigationBar": true,
      "ShowThumbnails": true,
      "SkipFinishConfirmDialog": true,
      "SkipDocumentDialog": true,
      "ShowImagesInFullWidth": true,
      "DisableGeolocation": true,
      "ShowDocumentDownloadDialogAfterAutomaticFinish": true,
      "AttachmentsMaxFileSize": 0,
      "SkipPreviewImageOnDisposableCertificate": true,
      "LoadCustomJs": true,
      "AllowCustomButtons": true,
      "GuidingBehavior": "GuideOnlyRequiredTasks",
      "FormFieldsGuidingBehavior": "AllowSubmitAlways",
      "ShowVersionNumber": true,
      "EnableWarningPopupOnLeave": true,
      "WarningPopupDisplayAfter": "FillOrSignField",
      "FinishWorkstepOnOpen": true,
      "AutoFinishAfterRequiredTasksDone": true,
      "GuidingBehaviorOnFinishedTask": "NoMove",
      "SkipThankYouDialog": true,
      "NativeAppsUrlScheme": "string",
      "DocumentViewingMode": "EndlessPaperAllDocuments",
      "ThumbnailMode": "ShowAllPages",
      "ShowTopBar": true,
      "DisplayRejectButtonInTopBar": true,
      "MultipleSignatureTypesAndBatchSigningSettings": {
        "IsUseBatchSigningCheckedByDefault": true,
        "IsRememberSignatureTypeCheckedByDefault": true,
        "IsRememberBatchSigningDecisionCheckedByDefault": true,
        "SkipMultipleSignatureTypesAndBatchSigningDialogIfBatchSigningPossible": true
      },
      "VisibleAreaOptions": {
        "AllowedDomain": "string",
        "Enabled": true
      },
      "ShowStartGuidingHint": true,
      "ShowStatusBar": true,
      "ShowZoomButtons": true,
      "ShowNoGeolocationWarning": true,
      "AutoStartGuiding": true,
      "ShowPageGap": true,
      "ShowPageNavigationButtons": true,
      "ShowFinishPossibleHint": true,
      "SkipRejectConfirmDialog": true,
      "BatchSigningType": "Basic",
      "BatchSigningDisableNextButtonUntilDialogScrolledToBottom": true
    },
    "SignatureConfigurations": [
      {
        "SpcId": "string",
        "PdfSignatureProperties": {
          "PdfAConformant": true,
          "PAdESPart4Compliant": true,
          "IncludeSigningCertificateChain": true,
          "SigningCertificateRevocationInformationIncludeMode": "DoNotInclude",
          "SignatureTimestampData": {
            "Uri": "string",
            "Username": "string",
            "Password": "string",
            "SignatureHashAlgorithm": "Sha1",
            "AuthenticationCertifiateDescriptor": {
              "Identifier": "string",
              "Type": "string"
            }
          },
          "EnableEutlVerification": true,
          "EnableValidateSigningCertificateName": true,
          "SigningCertificateNameRegex": "string"
        },
        "PdfSignatureCryptographicData": {
          "SignatureHashAlgorithm": "Sha1",
          "SigningCertificateDescriptor": {
            "Identifier": "string",
            "Type": "Sha1Thumbprint",
            "Csp": "Default"
          }
        },
        "CertificateFilter": {
          "KeyUsages": [
            "string"
          ],
          "ThumbPrints": [
            "string"
          ],
          "RootThumbPrints": [
            "string"
          ]
        }
      }
    ],
    "SigStringParsingConfiguration": {
      "SigStringsForParsings": [
        {
          "StartPattern": "string",
          "EndPattern": "string",
          "ClearSigString": true,
          "SearchEntireWordOnly": true
        }
      ]
    },
    "GeneralPolicies": {
      "AllowSaveDocument": true,
      "AllowSaveAuditTrail": true,
      "AllowRotatingPages": true,
      "AllowAppendFileToWorkstep": true,
      "AllowAppendTaskToWorkstep": true,
      "AllowEmailDocument": true,
      "AllowPrintDocument": true,
      "AllowFinishWorkstep": true,
      "AllowRejectWorkstep": true,
      "AllowRejectWorkstepDelegation": true,
      "AllowUndoLastAction": true,
      "AllowColorizePdfForms": true,
      "AllowAdhocPdfAttachments": true,
      "AllowAdhocSignatures": true,
      "AllowAdhocStampings": true,
      "AllowAdhocFreeHandAnnotations": true,
      "AllowAdhocTypewriterAnnotations": true,
      "AllowAdhocPictureAnnotations": true,
      "AllowAdhocPdfPageAppending": true,
      "AllowReloadOfFinishedWorkstep": true
    },
    "FinalizeActions": {
     
    },
    "TransactionCodeConfigurations": [
      {
        "Id": "string",
        "HashAlgorithmIdentifier": "Sha1",
        "Texts": [
          {
            "Language": "string",
            "Value": "string"
          }
        ]
      }
    ]
  },
  "PrepareSendEnvelopeStepsDescriptor": {
    "ClearFieldMarkupString": true
  }
}
</tab> <tab name="SOAP (XML)">
<AdhocWorkstepConfiguration>
	<!-- not relevant-->
	<WorkstepLabel>workstepLabel</WorkstepLabel>
	<!-- not relevant-->
	<SmallTextZoomFactorPercent>100</SmallTextZoomFactorPercent>
	<!-- not relevant-->
	<WorkstepTimeToLiveInMinutes>0</WorkstepTimeToLiveInMinutes>
	<!--Configure the actions done by the server and the by the clients when the workstep is finished.-->
	<FinishAction>
		<!-- not relevant-->
		<ServerAction callSynchronous="0"></ServerAction>
		<!--A client action specifies the redirect, when a recipient clicks on finish.-->	
		<ClientAction clientName="SIGNificant SignAnywhere" closeApp="0" RemoveDocumentFromRecentDocumentList="0" CallClientActionOnlyAfterSuccessfulSync="1">https://www.significant.com</ClientAction>
	</FinishAction>
	
	<!--Configure the adhoc workstep creation-->
	<NoSequenceEnforced>0</NoSequenceEnforced>
	
	<!-- Define default properties of signature fields / tasks-->
	<SigTemplate>
		<!--The elements width in points-->
		<width>50.5</width>
		<!--The elements height in points-->
		<height>100.5</height>
		<!--Parameter defining the signature type. Possible values: 'BiometricSignature', 'LocalCertificate', 'Picture', 'TransactionCode', 'TransactionCodeAndBiometricSignature', 'TransactionCodeAndLocalCertificate', 'TransactionCodeBiometricSignatureAndLocalCertificate' and 'BiometricSignature_and_LocalCertificate'. -->
		<param name="sigType">Picture</param>
		<!--Parameter that refines sigType "Picture": a list, seperated by "," from these values: Draw2Sign,Type2Sign,Click2Sign -->
		<param name="allowedCapturingMethods">Draw2Sign,Type2Sign</param>

    </SigTemplate>
	<!--Configuration for parsing the form fields. Possible values: '1' parse the form fields, '0' do not parse form fields-->
	<!--Attribute 'mapRequiredFieldsToRequiredTask': set the form filling task required when some of the fields are required. Possible values: '1' required forms lead to required tasks, '0' required fields do not enforce the task to be required-->
	<!--Attribute 'formsGrouping': Specify how the parsed forms should be grouped into tasks. Possible values: 'PerPage' all forms on one page are grouped to one forms group, 'PerDocument' all forms of one document are grouped to one forms group, 'PerEnvelope' all forms of all documents inside the envelope are grouped to one forms group-->
	<ParseFormFields mapRequiredFieldsToRequiredTask="0" formsGrouping="PerDocument">1</ParseFormFields>
	<!--If the workstep is not generated by hand but automatically generated by the Workstep Controller AdhocPolicies are specified-->
	<AdhocPolicies>
		<!-- not relevant-->
		<AllowModificationsAfterSignature>1</AllowModificationsAfterSignature>
	</AdhocPolicies>
	<!--Configurate the signatures for this workstep. One default configuration has to be defined. The default configuration is used for flatten signatures, adhoc signatures and signature fields which do not reference a special signature plugin configuration. The default configuration does not contain the attribute 'spcId'. If the attribute 'spcId' is defined the signature plugin configuration does only apply to signature fields referencing the configuration by specifiying <param name="spcId">id</param>.-->
	<signaturePluginConfiguration>
		<!--Configurate the signature properties-->
		<PdfSignatureProperties_V1>
			<!--Should the signatures be pdfA conformant. Note this setting does not convert a document into pdfA, it only keeps it pdfA conformant if it already is. Possible values: '1' sign pdfA conformant - in this case the file size will be bigger than without pdfA, '0' do not sign pdfA conformant.-->
			<PdfAConformant>0</PdfAConformant>
			<!--Defines if the signature should be PAdES part 4 compliant. Possible values: '1' sign the document PAdES part 4 compliant, '0' sign the document with standard pdf signature. Default value: '0'-->
			<PAdESPart4Compliant>1</PAdESPart4Compliant>
			<!--Defines if the certificate chain for the signing certificate should be embedded into the signature. Possible values: '1' include the certificate chain, '0' do not include the certificate chain. Default value: '0'-->
			<IncludeSigningCertificateChain>1</IncludeSigningCertificateChain>
			<!--Defines if and how the revocation information for the signing certificate chain should be embedded. Possible values: 'DoNotInclude' no revocation information is included, 'Include' the revocation information has to be included, if not possible the signature throws an exception, 'TryToInclude' if the revocation information can be fetched, it should be included, if not the signature is done without revocation information. Information about the signatures where the revocation information could not be included is saved into the WorkstepStatus, 'CheckRevocationIncludeOcsp' the revocation information has to be included when it is an OCSP, if checking of the revocation (OCSP or CRL) fails an exception is thrown. Information about the signatures where the revocation information could not be included is saved into the WorkstepStatus-->
			<SigningCertificateRevocationInformationIncludeMode>Include</SigningCertificateRevocationInformationIncludeMode>
		</PdfSignatureProperties_V1>
		<!--Configurate the cryptographic data-->
		<PdfSignatureCryptographicData_V1>
			<!--The hash algorithm used for the signatures. Possible values: 'Sha1', 'Sha256', 'Sha512'-->
			<SignatureHashAlgorithm>Sha256</SignatureHashAlgorithm>
			<!--The description of the signing certificate. More than one SigningCertificateDescriptor can be defined by adding this node more than once. If more SigningCertificateDescriptors are present, these configurations are used as backup if the selected SigningCertificateDescriptor is not working. For example if no revocation information can be retrieved although it should be included into the signature.-->
			<SigningCertificateDescriptor>
				<!--The certificates identifier-->
				<Identifier>3b777446a35fca027cbed5f69e24995945a611cb</Identifier>
				<!--The certificate identifier type. Possible values: 'Subject', 'Sha1Thumbprint'-->
				<Type>Sha1Thumbprint</Type>
				<!--The cryptographic service provider to locate the certificate. Possible values: 'default' uses the servers certificate store, 'custom' uses the custom signature action-->
				<Csp>Default</Csp>
			</SigningCertificateDescriptor>
		</PdfSignatureCryptographicData_V1>
	</signaturePluginConfiguration>
	
	<!--Configure the signature string parsing pattern: Text in the document will be parsed for this pattern and if found, a signature task is generated. -->
	<SigStringParsingConfiguration>
		<!--Defines a signature string to parse. Tag can be present more than once-->
		<SigStringsForParsing>
			<!--The start pattern of the signature string if it has a start and end pattern. Otherwise the whole word to parse-->
			<StartPattern>`sig</StartPattern>
			<!--End pattern if needed, otherwise empty-->
			<EndPattern>`</EndPattern>
			<!--Define if the signature strings should be cleared from the document. Possible values: '1' remove the signature strings from the document, '0' do not change the document-->
			<ClearSigString>1</ClearSigString>
			<!--Define if only the entire word should be searched. For example if start pattern is 'signature' only 'signature' but not 'signaturepad' is found. This option does only effect signature string without end patterns. Possible values: '1' search only the entire word, '0' search words containing the pattern as well.-->
			<SearchEntireWordOnly>1</SearchEntireWordOnly>
		</SigStringsForParsing>
	</SigStringParsingConfiguration>
	<!--Defines general policies for this workstep-->
	<GeneralPolicies>
		<!--Is the client allowed to save the workstep document-->
		<AllowSaveDocument>1</AllowSaveDocument>
		<!--Is the client allowed to save the audittrail document-->
		<AllowSaveAuditTrail>1</AllowSaveAuditTrail>
	
		<!-- not relevant-->
		<AllowFinishWorkstep>1</AllowFinishWorkstep>
		<!--Is the client allowed to reject the workstep-->
		<AllowRejectWorkstep>1</AllowRejectWorkstep>	
		
		<AllowAdhocPdfAttachments>1</AllowAdhocPdfAttachments>		
	</GeneralPolicies>

	<ViewerPreferences>
		<ShowVersionNumber>1</ShowVersionNumber>
		<EnableThumbnailDisplay>1</EnableThumbnailDisplay>
		<EnableWarningPopupOnLeave>1</EnableWarningPopupOnLeave>
		<WarningPopupDisplayAfter>Always</WarningPopupDisplayAfter>
		<GuidingBehavior>GuideRequiredAndOptionalTasks</GuidingBehavior>

	</ViewerPreferences>
	
</AdhocWorkstepConfiguration>
</tab>

</tabs>

Send Envelope

For sending an envelope we are using the following endpoints:

REST SOAP
https://demo.esignanywhere.net/Api/v4.0/envelope/send SendEnvelope_v1

This call requires the authorization, the file id(s) and the envelope configuration. The envelope configuration defines the envelope and the steps in the workflow. For each signing step you need to define a workstep configuration, which defines what the signer has to do in his/her singing task.

You can find a sample configuration for this call in the next section:

<tabs>

<tab name="REST (JSON)">
{
 
  "SspFileIds": [
    "##FileId##"
  ],
  "SendEnvelopeDescription": {

 
  "Name": "test",
  "EmailSubject": "Please sign the enclosed envelope",
  "EmailBody": "Dear #RecipientFirstName# #RecipientLastName#\n\n#PersonalMessage#\n\nPlease sign the envelope #EnvelopeName#\n\nEnvelope will expire at #ExpirationDate#",
  "DisplayedEmailSender": "",
  "EnableReminders": true,
  "FirstReminderDayAmount": 5,
  "RecurrentReminderDayAmount": 3,
  "BeforeExpirationDayAmount": 3,
  "DaysUntilExpire": 28,
  "CallbackUrl": "",
  "StatusUpdateCallbackUrl": "",
  "Steps": [
    {
      "OrderIndex": 1,
      "Recipients": [
        {
          "Email": "##EMAIL##",
          "FirstName": "##NAME##",
          "LastName": "##NAME##",
          "LanguageCode": "en",
          "EmailBodyExtra": "",
          "DisableEmail": false,
          "AddAndroidAppLink": false,
          "AddIosAppLink": false,
          "AddWindowsAppLink": false,
          "AllowDelegation": false,
          "AllowAccessFinishedWorkstep": false,
          "SkipExternalDataValidation": false,
          "AuthenticationMethods": [
            {
              "Method": "Pin",
              "Parameter": "1234"
            }
          ]
        }
      ],
      "EmailBodyExtra": "",
      "RecipientType": "Signer",
      "WorkstepConfiguration": {
        "WorkstepLabel": "test",
        "SmallTextZoomFactorPercent": 100,
        "FinishAction": {
          "ServerActions": [],
          "ClientActions": []
        },
        "ReceiverInformation": {
          "UserInformation": {
            "FirstName": "##NAME##",
            "LastName": "##NAME##",
            "EMail": "##EMAIL##"
          },
          "TransactionCodePushPluginData": []
        },
        "SenderInformation": {
          "UserInformation": {
            "FirstName": "##NAME##",
            "LastName": "##NAME##",
            "EMail": "##EMAIL##"
          }
        },
        "TransactionCodeConfigurations": [
          {
            "Id": "smsAuthTransactionCodeId",
            "HashAlgorithmIdentifier": "Sha256",
            "Texts": [
             
            ]
          }
        ],
        "SignatureConfigurations": [],
        "ViewerPreferences": {
          "FinishWorkstepOnOpen": false,
          "VisibleAreaOptions": {
            "AllowedDomain": "*",
            "Enabled": false
          }
        },
        "ResourceUris": {
          "SignatureImagesUri": "http://beta4.testlab.xyzmo.com//Resource/SignatureImages/?link=1agjn5MvqNpSt2jFiZQySxLEiAO~ecLOxKqy3soEHk2F4Dz1MPSYLxRkpA21XMkYY"
        },
        "AuditingToolsConfiguration": {
          "WriteAuditTrail": false,
          "NotificationConfiguration": {}
        },
        "Policy": {
          "GeneralPolicies": {
            "AllowSaveDocument": true,
            "AllowSaveAuditTrail": true,
            "AllowRotatingPages": false,
            "AllowEmailDocument": true,
            "AllowPrintDocument": true,
            "AllowFinishWorkstep": true,
            "AllowRejectWorkstep": true,
            "AllowRejectWorkstepDelegation": false,
            "AllowUndoLastAction": false,
            "AllowAdhocPdfAttachments": false,
            "AllowAdhocSignatures": false,
            "AllowAdhocStampings": false,
            "AllowAdhocFreeHandAnnotations": false,
            "AllowAdhocTypewriterAnnotations": false,
            "AllowAdhocPictureAnnotations": false,
            "AllowAdhocPdfPageAppending": false
          },
          "WorkstepTasks": {
            "PictureAnnotationMinResolution": 0,
            "PictureAnnotationMaxResolution": 0,
            "PictureAnnotationColorDepth": "Color16M",
            "SequenceMode": "NoSequenceEnforced",
            "PositionUnits": "PdfUnits",
            "ReferenceCorner": "Lower_Left",
            "Tasks": [
              {
                "Texts": [
                  {
                    "Language": "*",
                    "Value": "Signature Disclosure Text"
                  },
                  {
                    "Language": "en",
                    "Value": "Signature Disclosure Text"
                  }
                ],
                "Headings": [
                  {
                    "Language": "*",
                    "Value": "Signature Disclosure Subject"
                  },
                  {
                    "Language": "en",
                    "Value": "Signature Disclosure Subject"
                  }
                ],
                "IsRequired": false,
                "Id": "ra",
                "DisplayName": "ra",
                "DocRefNumber": 1,
                "DiscriminatorType": "Agreements"
              },
              {
                "PositionPage": 1,
                "Position": {
                  "PositionX": 63.0,
                  "PositionY": 603.0
                },
                "Size": {
                  "Height": 80.0,
                  "Width": 190.0
                },
                "AdditionalParameters": [
                  {
                    "Key": "enabled",
                    "Value": "1"
                  },
                  {
                    "Key": "positioning",
                    "Value": "onPage"
                  },
                  {
                    "Key": "req",
                    "Value": "1"
                  },
                  {
                    "Key": "fd",
                    "Value": ""
                  },
                  {
                    "Key": "fd_dateformat",
                    "Value": "dd-MM-yyyy HH:mm:ss"
                  },
                  {
                    "Key": "fd_timezone",
                    "Value": "datetimeutc"
                  },
                  {
                    "Key": "spcId",
                    "Value": "tLevelId"
                  }
                ],
                "AllowedSignatureTypes": [
                  {
                    "AllowedCapturingMethod": "Click2Sign",
                    "Id": "679dd763-6e25-4a68-929d-cb1ce13dac7e",
                    "DiscriminatorType": "SigTypeClick2Sign",
                    "Preferred": false,
                    "StampImprintConfiguration": {
                      "DisplayExtraInformation": true,
                      "DisplayEmail": true,
                      "DisplayIp": true,
                      "DisplayName": true,
                      "DisplaySignatureDate": true,
                      "FontFamily": "Times New Roman",
                      "FontSize": 11.0
                    }
                  }
                ],
                "UseTimestamp": false,
                "IsRequired": true,
                "Id": "1#XyzmoDuplicateIdSeperator#Signature_a1e940eb-bcd5-2222-9777-f3570faedf3f",
                "DisplayName": "",
                "DocRefNumber": 1,
                "DiscriminatorType": "Signature"
              }
            ]
          }
        },
        "Navigation": {
          "HyperLinks": [],
          "Links": [],
          "LinkTargets": []
        }
      },
      "DocumentOptions": [
        {
          "DocumentReference": "1",
          "IsHidden": false
        }
      ],
      "UseDefaultAgreements": true
    },
    {
      "OrderIndex": 2,
      "Recipients": [
        {
          "Email": "##EMAIL##",
          "FirstName": "##NAME##",
          "LastName": "##NAME##",
          "LanguageCode": "en",
          "EmailBodyExtra": "",
          "DisableEmail": false,
          "AddAndroidAppLink": false,
          "AddIosAppLink": false,
          "AddWindowsAppLink": false,
          "AllowDelegation": false,
          "SkipExternalDataValidation": false,
          "AuthenticationMethods": []
        }
      ],
      "EmailBodyExtra": "",
      "RecipientType": "Cc",
      "DocumentOptions": [],
      "UseDefaultAgreements": false
    }
  ],
  "AddFormFields": {
    "Forms": {}
  },
  "OverrideFormFieldValues": {
    "Forms": {}
  },
  "AttachSignedDocumentsToEnvelopeLog": false
}
}
</tab> <tab name="SOAP (XML)">
<envelope>
   <name>eSignAnyWhere Tutorial</name>
   <eMailSubject>Document of eSignAnyWhere Tutorial</eMailSubject>
   <eMailBody>Dear #RecipientFirstName#! Please sign this tutorial document.</eMailBody>
   <enableReminders>True</enableReminders>
   <firstReminderDayAmount>1</firstReminderDayAmount>
   <recurrentReminderDayAmount>1</recurrentReminderDayAmount>
   <beforeExpirationReminderDayAmount>1</beforeExpirationReminderDayAmount>
   <daysUntilExpire>2</daysUntilExpire>
   <!-- callback to your backend system on a completed envelope 
   <callbackUrl>http://172.16.17.78:57550/default.aspx?EnvelopeId=##EnvelopeId##&amp;myParamForMe=1234</callbackUrl> 
   -->
   <callbackUrl />
   <steps>
      <step>
         <emailBodyExtra />
         <orderIndex>1</orderIndex>
         <recipientType>Signer</recipientType>
         <recipients>
            <recipient>
               <languageCode>en</languageCode>
               <eMail>##SIGNER-EMAIL##</eMail>
               <firstName>Alice</firstName>
               <lastName>Somename</lastName>
               <authentications>
                  <authentication>
                     <method>Pin</method>
                     <parameter>1234</parameter>
                  </authentication>
               </authentications>
            </recipient>
         </recipients>
        <workstepConfiguration>
   <WorkstepLabel />
   <SmallTextZoomFactorPercent>100</SmallTextZoomFactorPercent>
   <WorkstepTimeToLiveInMinutes>11520</WorkstepTimeToLiveInMinutes>
   <FinishAction />
   <signatureTemplate>
      <version>1.2.0.2</version>
      <positionUnits>PdfUnits</positionUnits>
      <positionReferenceCorner>Lower_Left</positionReferenceCorner>
      <sig id="93cce567-ae5c-4e98-ac99-9f56ac034250">
         <positionPage>1</positionPage>
         <DocRefNumber>1</DocRefNumber>
         <positionX>80.22857</positionX>
         <positionY>158.8629</positionY>
         <width>171.4286</width>
         <height>68.57143</height>
         <param name="enabled">1</param>
         <param name="completed">0</param>
         <param name="sigType">Picture</param>
         <param name="positioning">onPage</param>
         <param name="allowedCapturingMethods">Click2Sign</param>
      </sig>
   </signatureTemplate>
   <Policy version="1.1.0.0">
      <GeneralPolicies>
         <AllowSaveDocument>1</AllowSaveDocument>
         <AllowSaveAuditTrail>1</AllowSaveAuditTrail>
      </GeneralPolicies>
      <WorkstepTasks SequenceMode="SequenceOnlyRequiredTasks" originalSequenceMode="SequenceOnlyRequiredTasks">
         <Task enabled="1" completed="0" required="1" id="93cce567-ae5c-4e98-ac99-9f56ac034250" displayName="SignField 1" DocRefNumber="1" type="SignField" internalAllConcernedDocRefNumbersList="1" allRequiredFieldsFilledOnWorkstepCreation="0" />
      </WorkstepTasks>
   </Policy>
   <TransactionCodeConfigurations>
      <TransactionCodeConfiguration trConfId="">
         <Message>Please sign the document with the transactionId {tId} with the code: {Token}</Message>
         <hashAlgorithmIdentifier>Sha256</hashAlgorithmIdentifier>
      </TransactionCodeConfiguration>
      <TransactionCodeConfiguration trConfId="Trans1">
         <Message>Please accept the transactionId {tId} with the code: {Token}</Message>
         <hashAlgorithmIdentifier>Sha256</hashAlgorithmIdentifier>
      </TransactionCodeConfiguration>
   </TransactionCodeConfigurations>
</workstepConfiguration>
      </step>
      <step>
         <emailBodyExtra />
         <orderIndex>2</orderIndex>
         <recipientType>CC</recipientType>
         <recipients>
            <recipient>
               <languageCode>en</languageCode>
               <eMail>##COPYRECEIVER-MAIL##</eMail>
               <firstName>Charly</firstName>
               <lastName>Randomname</lastName>
            </recipient>
         </recipients>
      </step>
   </steps>
</envelope>
</tab>

</tabs>

This is the simplest form of a workstep configuration. With the Developer Feature of eSAW 2.6+ you can download the envelope JSON or the envelope XML including the workstep configuration of any envelope designed in eSAW UI. The second signer only receives a copy, so he/she does not need to have a workstep configuration.

If the creation of the envelope was successful, you will get the envelope id as response. In REST:

{
    "EnvelopeId": "56db6133-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

In SOAP:

<apiResult version="2.2.458.6616">
  <baseResult>ok</baseResult>
  <okInfo>
    <envelopeId>56db6133-xxxx-xxxx-xxxx-xxxxxxxxxxxx</envelopeId>
  </okInfo>
</apiResult>

After the successful creation of the envelope, it is sent to the first recipient. The envelope id is used for managing the envelopes (send reminder, cancel delete, reject envelope,…).

The recipient language must be supported by your organization (Settings->Localization).

Find the Envelope

After sending the envelope you can use the following api call to search for the envelope:

REST SOAP
https://demo.esignanywhere.net/Api/v4.0/envelope/find FindEnvelopes_v1 or FindEnvelopes_v2

In the next section you can find a sample configuration which you need for the api call.

<tabs>

<tab name="REST (JSON)">

{
  "StartDate": "2020-04-17T13:09:50.089Z",
  "EndDate": "2020-04-17T13:09:50.089Z",
  "SearchText": "string",
  "Status": "Draft",
  "InStatusSinceDays": 0,
  "Senders": [
    "string"
  ],
  "Signers": [
    "string"
  ],
  "Recipients": [
    "string"
  ],
  "WaitingForRecipient": "string",
  "Bulk": "string"
}

</tab> <tab name="SOAP (XML)">

<findEnvelopesDescriptor>
  <status>Draft|Started|InProgress|Canceled|Completed|Expired|Rejected|Template|ActionRequired| WaitingForOthers|ExpiringSoon|Active</status> <inStatusSinceDays>30</inStatusSinceDays>
  <sentAfterDate>2017-02-08T12:18:37.2415657Z</sentAfterDate>
  <sentBeforeDate>2017-05-10T11:18:37.2415657Z</sentBeforeDate>
  <searchText></searchText>
  <hasSender>
    <eMail></eMail>
  </hasSender>
  <hasSigner>
    <eMail></eMail>
  </hasSigner>
  <hasRecipient>
    <eMail></eMail>
  </hasRecipient>
  <waitingForRecipient></waitingForRecipient>
</findEnvelopesDescriptor>

</tab>

</tabs>

REST SOAP
Draft Draft
Canceled Canceled
Completed Completed
Expired Expired
Rejected Rejected
Template Template
Active Active
ExpiringSoon ExpiringSoon
WaitingForOthers WaitingForOthers
ActionRequired  
Started
InProgress

If you search for templates you will get the templateId which you need for the following api calls:

REST SOAP
https://demo.esignanywhere.net/Api/v4.0/envelope/sendFromTemplate CreateDraftFromTemplate_v1
https://demo.esignanywhere.net/Api/v4.0/envelope/createFromTemplate SendEnvelopeFromTemplate_v1
https://demo.esignanywhere.net/Api//v4.0/envelope/{templateId}/copyFromTemplate CopyDocumentFromTemplate_v1

For more information about the process of finding the template and send an envelope from the template please also have a look at the template use case.

If you have not finished the envelope then search for “Active” envelopes, if the envelope is already finished please search for “Completed” envelopes to find the envelope you have sent in the api call above. As response from this api call you will get a list of all envelopes which fulfill the status.

Envelope Status & Callback

The envelope id can be used any time to receive the envelope status. Therefore, you simply call:

REST SOAP
https://demo.esignanywhere.net/Api/v4.0/envelope/##envelopeId## GetEnvelopeById_v1

You can find a sample response for this call in the next section:

<tabs>

<tab name="REST (JSON)">
{
    "Status": "InProgress",
    "SendDate": "2020-03-17T08:24:47.62Z",
    "ExpirationDate": "2020-04-14T08:24:47.62",
    "Bulks": [
        {
            "Status": "InProgress",
            "Email": "",
            "LogDocumentId": "",
            "FinishedDocuments": [],
            "Steps": [
                {
                    "Id": "c211d550-25c5-4f61-94f9-9eb5695685fd",
                    "FirstName": "##NAME##",
                    "LastName": "##NAME##",
                    "OrderIndex": 1,
                    "Email": "##EMAIL##",
                    "LanguageCode": "en",
                    "Status": "NotSigned",
                    "StatusReason": "",
                    "RecipientType": "Signer",
                    "OpenedDate": "2020-03-17T08:24:59.383Z",
                    "WorkstepRedirectionUrl": "http://beta4.testlab.xyzmo.com/workstepredirector/sign?identifier=##RedirectionURL##",
                    "AllowAccessFinishedWorkstep": false,
                    "Authentication": [
                        {
                            "Method": "Pin",
                            "Parameter": "1234",
                            "Filters": []
                        }
                    ],
                    "IsParallel": false,
                    "WorkstepConfiguration": {
                        "WorkstepLabel": "test",
                        "SmallTextZoomFactorPercent": 100,
                        "FinishAction": {
                            "ServerActions": [
                                {
                                    "CallSynchronous": false,
                                    "Action": "http://beta4.testlab.xyzmo.com//workstepredirector/setfinishaction?wid=##WorkstepId##"
                                }
                            ],
                            "ClientActions": []
                        },
                        "ReceiverInformation": {
                            "UserInformation": {
                                "FirstName": "##NAME##",
                                "LastName": "##NAME##",
                                "EMail": "##EMAIL##"
                            },
                            "TransactionCodePushPluginData": []
                        },
                        "SenderInformation": {
                            "UserInformation": {
                                "FirstName": "##NAME##",
                                "LastName": "##NAME##",
                                "EMail": "##EMAIL##"
                            }
                        },
                        "TransactionCodeConfigurations": [
                            {
                                "Id": "otpSignatureSmsText",
                                "HashAlgorithmIdentifier": "Sha256",
                                "Texts": [
                                    
                                ]
                            }
                        ],
                        "SignatureConfigurations": [
                            {
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": false,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "DoNotInclude"
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "timestampSigningId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": false,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "DoNotInclude",
                                    "SignatureTimestampData": {
                                        "Uri": "https://timestamp.test.namirialtsp.com",
                                        "Username": "xyzmo",
                                        "Password": "xyzmo",
                                        "SignatureHashAlgorithm": "Sha256"
                                    }
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "padesSigningId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": true,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "IncludeDss"
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "padesTimestampSigningId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": true,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "IncludeDss",
                                    "SignatureTimestampData": {
                                        "Uri": "https://timestamp.test.namirialtsp.com",
                                        "Username": "xyzmo",
                                        "Password": "xyzmo",
                                        "SignatureHashAlgorithm": "Sha256"
                                    }
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "padesRemoteCertificateSigningId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": true,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "IncludeDss"
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "padesRemoteCertificateTimestampSigningId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": true,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "IncludeDss",
                                    "SignatureTimestampData": {
                                        "Uri": "https://timestamp.test.namirialtsp.com",
                                        "Username": "xyzmo",
                                        "Password": "xyzmo",
                                        "SignatureHashAlgorithm": "Sha256"
                                    }
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "automaticSigningId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": false,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "DoNotInclude"
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "automaticTimestampSigningId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": false,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "DoNotInclude",
                                    "SignatureTimestampData": {
                                        "Uri": "https://timestamp.test.namirialtsp.com",
                                        "Username": "xyzmo",
                                        "Password": "xyzmo",
                                        "SignatureHashAlgorithm": "Sha256"
                                    }
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "swissComSigningId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": true,
                                    "IncludeSigningCertificateChain": false,
                                    "SigningCertificateRevocationInformationIncludeMode": "IncludeDss"
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527A6BCFA8B4D7D0183FCA6B735B1C246D14AE",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            },
                            {
                                "SpcId": "tLevelId",
                                "PdfSignatureProperties": {
                                    "PdfAConformant": false,
                                    "PAdESPart4Compliant": true,
                                    "IncludeSigningCertificateChain": true,
                                    "SigningCertificateRevocationInformationIncludeMode": "DoNotInclude",
                                    "SignatureTimestampData": {
                                        "Uri": "https://timestamp.test.namirialtsp.com",
                                        "Username": "xyzmo",
                                        "Password": "xyzmo",
                                        "SignatureHashAlgorithm": "Sha256"
                                    }
                                },
                                "PdfSignatureCryptographicData": {
                                    "SignatureHashAlgorithm": "Sha256",
                                    "SigningCertificateDescriptor": {
                                        "Identifier": "14527a6bcfa8b4d7d0183fca6b735b1c246d14ae",
                                        "Type": "Sha1Thumbprint",
                                        "Csp": "Default"
                                    }
                                }
                            }
                        ],
                        "ViewerPreferences": {
                            "FinishWorkstepOnOpen": false,
                            "VisibleAreaOptions": {
                                "AllowedDomain": "*",
                                "Enabled": false
                            }
                        },
                        "ResourceUris": {
                            "SignatureImagesUri": "http://beta4.testlab.xyzmo.com//Resource/SignatureImages/?link=1WStxYx9aVh2bKgPnnOoA2x56aVWCf/oMP6GirOkH5eOattOs60C8lVAATUnqhUHa"
                        },
                        "Policy": {
                            "GeneralPolicies": {
                                "AllowSaveDocument": true,
                                "AllowSaveAuditTrail": true,
                                "AllowRotatingPages": false,
                                "AllowAppendFileToWorkstep": false,
                                "AllowAppendTaskToWorkstep": false,
                                "AllowEmailDocument": true,
                                "AllowPrintDocument": true,
                                "AllowFinishWorkstep": true,
                                "AllowRejectWorkstep": true,
                                "AllowRejectWorkstepDelegation": false,
                                "AllowUndoLastAction": false,
                                "AllowColorizePdfForms": false,
                                "AllowAdhocPdfAttachments": false,
                                "AllowAdhocSignatures": false,
                                "AllowAdhocStampings": false,
                                "AllowAdhocFreeHandAnnotations": false,
                                "AllowAdhocTypewriterAnnotations": false,
                                "AllowAdhocPictureAnnotations": false,
                                "AllowAdhocPdfPageAppending": false
                            },
                            "WorkstepTasks": {
                                "PictureAnnotationMinResolution": 0,
                                "PictureAnnotationMaxResolution": 0,
                                "PictureAnnotationColorDepth": "Color16M",
                                "SequenceMode": "NoSequenceEnforced",
                                "PositionUnits": "PdfUnits",
                                "ReferenceCorner": "Lower_Left",
                                "Tasks": [
                                    {
                                        "Texts": [
                                            {
                                                "Language": "*",
                                                "Value": "Signature Disclosure Text"
                                            },
                                            {
                                                "Language": "en",
                                                "Value": "Signature Disclosure Text"
                                            }
                                        ],
                                        "Headings": [
                                            {
                                                "Language": "*",
                                                "Value": "Signature Disclosure Subject"
                                            },
                                            {
                                                "Language": "en",
                                                "Value": "Signature Disclosure Subject"
                                            }
                                        ],
                                        "IsRequired": false,
                                        "Id": "ra",
                                        "DisplayName": "ra",
                                        "DocRefNumber": 1,
                                        "DiscriminatorType": "Agreements"
                                    },
                                    {
                                        "PositionPage": 1,
                                        "Position": {
                                            "PositionX": 63.0,
                                            "PositionY": 603.0
                                        },
                                        "Size": {
                                            "Height": 80.0,
                                            "Width": 190.0
                                        },
                                        "AdditionalParameters": [
                                            {
                                                "Key": "enabled",
                                                "Value": "1"
                                            },
                                            {
                                                "Key": "positioning",
                                                "Value": "onPage"
                                            },
                                            {
                                                "Key": "req",
                                                "Value": "1"
                                            },
                                            {
                                                "Key": "fd",
                                                "Value": ""
                                            },
                                            {
                                                "Key": "fd_dateformat",
                                                "Value": "dd-MM-yyyy HH:mm:ss"
                                            },
                                            {
                                                "Key": "fd_timezone",
                                                "Value": "datetimeutc"
                                            },
                                            {
                                                "Key": "spcId",
                                                "Value": "tLevelId"
                                            }
                                        ],
                                        "AllowedSignatureTypes": [
                                            {
                                                "AllowedCapturingMethod": "Click2Sign",
                                                "Id": "679dd763-6e25-4a68-929d-cb1ce13dac7e",
                                                "DiscriminatorType": "SigTypeClick2Sign",
                                                "Preferred": false,
                                                "StampImprintConfiguration": {
                                                    "DisplayExtraInformation": true,
                                                    "DisplayEmail": true,
                                                    "DisplayIp": true,
                                                    "DisplayName": true,
                                                    "DisplaySignatureDate": true,
                                                    "FontFamily": "Times New Roman",
                                                    "FontSize": 11.0
                                                }
                                            }
                                        ],
                                        "UseTimestamp": false,
                                        "IsRequired": true,
                                        "Id": "1#XyzmoDuplicateIdSeperator#Signature_a1e940eb-bcd5-2222-9777-f3570faedf3f",
                                        "DisplayName": "",
                                        "DocRefNumber": 1,
                                        "DiscriminatorType": "Signature"
                                    }
                                ]
                            }
                        },
                        "Navigation": {
                            "HyperLinks": [],
                            "Links": [],
                            "LinkTargets": []
                        }
                    }
                },
                {
                    "Id": "ff4b740e-f0a8-4e69-ad32-54cae6104993",
                    "FirstName": "##NAME##",
                    "LastName": "##NAME##",
                    "OrderIndex": 2,
                    "Email": "##EMAIL##",
                    "LanguageCode": "en",
                    "Status": "NotSigned",
                    "StatusReason": "",
                    "RecipientType": "Cc",
                    "WorkstepRedirectionUrl": "",
                    "AllowAccessFinishedWorkstep": false,
                    "IsParallel": false,
                    "WorkstepConfiguration": {
                        "SmallTextZoomFactorPercent": 100,
                        "ViewerPreferences": {},
                        "Policy": {
                            "GeneralPolicies": {
                                "AllowRotatingPages": true,
                                "AllowFinishWorkstep": true,
                                "AllowUndoLastAction": true
                            },
                            "WorkstepTasks": {
                                "PictureAnnotationMinResolution": 0,
                                "PictureAnnotationMaxResolution": 0,
                                "PictureAnnotationColorDepth": "Color16M",
                                "SequenceMode": "NoSequenceEnforced",
                                "PositionUnits": "PdfUnits",
                                "ReferenceCorner": "Lower_Left",
                                "Tasks": []
                            }
                        }
                    }
                }
            ]
        }
    ],
    "Documents": [
        {
            "PageSizesInPoints": [
                {
                    "Height": 792.0,
                    "Width": 612.0
                }
            ],
            "DocRefNumber": 1,
            "FileName": "test.pdf",
            "FormFields": []
        }
    ],
    "Id": "62ce2b28-deb9-40a0-9656-88609353494b",
    "Bulk": "",
    "BasicOptions": {
        "Name": "test",
        "EmailSubject": "Please sign the enclosed envelope",
        "EmailBody": "Dear #RecipientFirstName# #RecipientLastName#\n\n#PersonalMessage#\n\nPlease sign the envelope #EnvelopeName#\n\nEnvelope will expire at #ExpirationDate#",
        "EnableReminders": true,
        "FirstReminderDayAmount": 5,
        "RecurrentReminderDayAmount": 3,
        "BeforeExpirationDayAmount": 3
    }
}
</tab> <tab name="SOAP (XML)">
<apiResult version="2.2.458.6616">
  <baseResult>ok</baseResult>
  <okInfo>
    <envelopeStatus>
      <id>13ad0518-xxxx-xxxx-xxxx-xxxxxxxxxxx</id>
      <name>eSignAnyWhere Tutorial</name>
      <status>Completed</status>
      <sendDate>2017-03-15T12:13:13.453Z</sendDate>
      <expirationDate>2017-03-17T12:13:13.453Z</expirationDate>
      <bulkRecipients>
        <bulkRecipient eMail="">
          <status>Completed</status>
          <recipients>
            <recipient>
              <orderIndex>1</orderIndex>
              <eMail>first.signer@email.com</eMail>
              <status>Signed</status>
              <signedDate>2017-03-15T12:13:42.717Z</signedDate>
              <recipientType>Signer</recipientType>
              <workstepRedirectionUrl></workstepRedirectionUrl>
            </recipient>
            <recipient>
              <orderIndex>2</orderIndex>
              <eMail>cc@email.com</eMail>
              <status>NotSigned</status>
              <signedDate>2017-03-15T12:13:43.183Z</signedDate>
              <recipientType>Cc</recipientType>
              <workstepRedirectionUrl></workstepRedirectionUrl>
            </recipient>
          </recipients>
          <completedDocuments>
            <logDocumentId>52cba71e-xxxx-xxxx-xxxx-xxxxxxxxxxx</logDocumentId>
            <completedDocument>
              <documentId>77851da5-xxxx-xxxx-xxxx-xxxxxxxxxxx</documentId>
              <fileName>eSignAnyWhere_Tutorial.pdf</fileName>
              <fields />
            </completedDocument>
          </completedDocuments>
        </bulkRecipient>
      </bulkRecipients>
    </envelopeStatus>
  </okInfo>
</apiResult>
</tab>

</tabs>

Callback

The configured callback URL is used to notify your system if the state of an envelope or workstep is changing. So you can track the status of envelopes without polling the eSignAnyWhere server regulary.

Attention: If you are using a callback URL, which does not return a HTTP 200 code, eSignAnyWhere tries to recall the URL. After some attemps the envelope goes into an error state and will not be finished!

Download a Finished Document

To download a finished document you simply call the function:


You have to use the envelope id and the document id to download the file from the server (Attention: just documents of finished envelopes can be downloaded and the document id is different from the uploaded-file-id!) You can receive the document id from the response of the getEnvelope call.

Download response:

<apiResult version="2.2.458.6616">
  <baseResult>ok</baseResult>
  <okInfo>
    <file>
      <name>eSignAnyWhere_Tutorial.pdf</name>
      <data>##BASE64_FILE##</data>
    </file>
  </okInfo>
</apiResult>

For REST it would be for example a 200 OK status.